Глава 10. Система компоновки данных
Система компоновки данных предназначена для создания отчетов «1С:Предприятия» на основе их декларативного описания. Использование декларативного описания отчетов позволяет реализовать следующие возможности:
● создание отчета без программирования;
● возможность создания различных вариантов отчета;
● возможность задания различных вариантов пользовательских настроек;
● использование автоматически генерируемых форм просмотра и настройки отчета;
● разбиение исполнения отчета на этапы;
● исполнение отдельных этапов построения отчета на различных компьютерах;
● независимое использование отдельных частей системы компоновки данных;
● программное влияние на процесс выполнения отчета;
● настройки структуры отчета;
● совмещение в отчете нескольких таблиц;
● создание вложенных отчетов и др.
Возможности системы компоновки данных используются:
● при работе динамических списков (см. здесь);
● при подготовке данных для последующей обработки (например, в обработках).
10.1. Общие сведения о компоновке данных
Система компоновки данных представляет собой совокупность элементов, каждый из которых соответствует определенному этапу выполнения отчета. Таким образом, весь процесс выполнения отчета в системе компоновки данных сводится к последовательному переходу от одного элемента к другому, доходя в итоге до готового отчета.
Каждый элемент системы компоновки данных имеет собственное декларативное описание, возможность программного доступа и возможность сериализации в/из XML. Такой подход позволяет гибко управлять различными этапами выполнения отчета.
Основные элементы системы компоновки данных представлены на рис.343.

Рис. 343. Основные элементы системы компоновки данных
Схема компоновки данных – описывает суть данных, которые предоставляются отчету (откуда получать данные и как можно управлять компоновкой данных). Представляет собой базу, на основе которой могут быть сформированы всевозможные отчеты. Может содержать:
● текст запроса с инструкциями системы компоновки данных;
● описание нескольких наборов данных;
● описание доступных полей;
● описание связей между несколькими наборами данных;
● описание параметров получения данных;
● описание макетов полей и группировок и др.
Настройки компоновки данных – описывают все, что может настроить разработчик или пользователь в некоторой установленной схеме компоновки данных. Могут содержать:
● отбор;
● упорядочивание;
● условное оформление;
● структуру отчета (составные части будущего отчета);
● параметры получения данных;
● параметры вывода данных и др.
Макет компоновки данных – представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек.
Элемент результата компоновки данных – результат компоновки данных представляется набором элементов результата компоновки данных. Как самостоятельная логическая сущность результат компоновки данных не существует, существуют только его элементы. Элементы результата компоновки данных можно вывести в табличный документ для представления их конечному пользователю или в другие виды документов.
Процесс компоновки данных состоит из нескольких этапов, которые представлены на рис.344.

Рис. 344. Этапы процесса компоновки данных
Создание схемы компоновки данных может быть выполнено:
● визуально, при помощи конструктора схемы компоновки данных;
● визуально, при помощи любого редактора, позволяющего редактировать текст XML;
● программно, при помощи объектов встроенного языка системы «1С:Предприятие».
Редактирование настроек компоновки данных – для редактирования настроек компоновки в системе предусмотрен ряд объектов встроенного языка и расширений табличного поля.
Подготовка к исполнению – процесс формирования макета компоновки данных. В данном процессе формируются запросы, необходимые для получения данных, указанных в настройках, формируются макеты областей отчета.
Исполнение компоновки данных – это процесс получения, агрегации, оформления данных.
Вывод результата компоновки данных – полученный результат компоновки может быть выведен в документ, который будет показан пользователю. Отчет может быть выведен в различных форматах.
Схема на рис.345 в обобщенном виде представляет объекты системы компоновки данных, используемые на различных этапах создания отчета.

Рис. 345. Объекты системы компоновки данных
Конструктор схемы компоновки данных – может быть использован для создания схемы компоновки данных.
Компоновщик настроек компоновки данных – может быть использован для редактирования настроек системы компоновки данных.
Компоновщик макета компоновки данных – используется для подготовки к исполнению.
Процессор компоновки данных – осуществляет исполнение компоновки данных.
Процессор вывода результата компоновки данных в табличный документ – выводит элементы результата компоновки данных в табличный документ.
Отличительной особенностью отчета, получаемого с помощью системы компоновки данных, является то, что он может иметь сложную структуру, включающую в себя различное сочетание следующих элементов:
● группировка,
● таблица,
● диаграмма,
● вложенный отчет.
Таким образом, отчет, полученный с помощью системы компоновки данных, представляет собой не таблицу, а сложную иерархическую структуру, в которой участвуют перечисленные элементы.

Рис. 346. Структура отчета
На данном рисунке приведен пример отчета, содержащего на первом уровне иерархии диаграмму и группировку по номенклатурным группам. А внутри группировки по номенклатурным группам расположена таблица, содержащая обороты номенклатуры, принадлежащей указанной номенклатурной группе.
10.2. Общие объекты системы компоновки данных
10.2.1. Свойство «Использование»
Многие объекты, в основном подсистемы настроек компоновки данных, имеют свойство булевого типа Использование. Это свойство позволяет отключать часть функциональности без ее физического удаления. Значение этого свойства по умолчанию – Истина, кроме отдельно описанных случаев.
10.2.2. Поле системы компоновки данных
Это объект, представляющий путь к данным поля. Поле реализовано в виде отдельного типа с целью устранить неоднозначность в свойствах некоторых объектов, которые могут принимать значения как строк, так и полей. Имеет конструктор с параметром Строка, описывающий путь к данным; свойств и методов не имеет. Если путь к данным содержит идентификатор с пробелами или специальными символами, то такие идентификаторы следует заключать в квадратные скобки.
10.2.3. Параметры системы компоновки данных
Механизм параметров был реализован для единообразного использования и редактирования коллекций некоторых значений, состав и тип элементов которых определен заранее и не может быть изменен. Механизм параметров состоит из двух частей:
● Доступные параметры – определяют состав коллекции и допустимые типы ее элементов. Параметр является аналогом поля системы компоновки данных.
● Значения параметров.
10.3. Схема компоновки данных
Схема компоновки данных представляется объектом встроенного языка системы «1С:Предприятие» СхемаКомпоновкиДанных и состоит из множества других вложенных объектов. Схема компоновки данных имеет представление в виде XML; таким образом, может быть создана любыми средствами, позволяющими генерировать XML, равно как и использована любыми средствами, которые могут читать XML.
Схема компоновки данных используется для предоставления информации о доступных настройках, а также при формировании макета компоновки данных (см. здесь), т. е. при исполнении компоновки данных.
Для визуального редактирования схемы компоновки данных предназначен конструктор схемы компоновки данных (см. здесь).
Загрузку схемы компоновки данных из XML можно осуществить стандартными средствами встроенного языка.
Копировать в буфер обменаЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ЭлементыФормы.ТекстСхемыКомпоновкиДанных.ПолучитьТекст()); СКД = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));
Все выражения, описываемые в схеме компоновки данных, записываются на языке выражений системы компоновки данных (см. здесь).
10.3.1. Составные части схемы компоновки данных
Каждая схема компоновки данных содержит множество объектов, описывающих ту или иную часть. Рассмотрим эти составные части.

Рис. 347. Составные части схемы компоновки данных
10.3.1.1. Источники данных
Схема компоновки данных может содержать несколько источников данных.
Под источником данных подразумевается источник, из которого будут получаться данные. В качестве источника данных выступает информационная база системы «1С:Предприятие».
Источники данных описываются в свойстве ИсточникиДанных схемы, которое содержит коллекцию значений, состоящую из элементов ИсточникДанныхСхемыКомпоновкиДанных.
10.3.1.2. Наборы данных
Наборы данных в схеме компоновки данных содержат информацию о том, какие поля можно получать из данного набора, какие поля набора данных можно использовать в отборе и т. п.
В схеме компоновки данных допускается наличие нескольких наборов данных (см. здесь).
Наборы данных описываются в свойстве НаборыДанных схемы. Свойство содержит коллекцию значений, в которую могут входить следующие элементы:
● запрос (НаборДанныхЗапросСхемыКомпоновкиДанных) – получение данных описывается при помощи языка запросов;
● объект (НаборДанныхОбъектСхемыКомпоновкиДанных) – описывается имя внешнего набора данных, из которого будут получаться данные;
● объединение (НаборДанныхОбъединениеСхемыКомпоновкиДанных) – описываются наборы данных – составные части объединения.
Все три набора данных содержат ряд общих свойств:
● Имя – имя набора данных, под которым к этому набору данных можно будет обращаться из других объектов схемы компоновки данных. В рамках одной схемы компоновки данных имена наборов данных должны быть уникальными.
● Поля – описания полей, доступных для набора данных.
Кроме этого, наборы данных – запрос и объект содержат свойство ИсточникДанных – имя источника данных, из которого будут получаться данные. Оно должно содержать имя одного источника данных, присутствующего в схеме компоновки данных (см. здесь).
Набор данных – запрос содержит свойство Запрос – текст запроса, при помощи которого будут получаться данные из источника данных. В тексте запроса допускается использование специального расширения – расширения языка запросов для системы компоновки данных (см. здесь).
Набор данных – объединение содержит свойство Элементы, содержащее перечень наборов данных, входящих в объединение (см. здесь).
10.3.1.2.1. Набор данных – запрос
Содержит обычный запрос к данным, расположенным в информационной базе «1С:Предприятия».
Набор данных – запрос может содержать пакетный запрос. Результирующим запросом будет пакетный запрос. При этом состав полей, которые будут помещаться во временную таблицу, автоматически определяется по использованным в других запросах полям. В случае, если от временной таблицы не понадобилось ни одно поле, временная таблица не будет помещаться в результирующий запрос. Отбор, применяемый в настройках компоновки данных, применяется во всех запросах пакета.
Содержимым набора данных будет считаться результат последнего запроса пакета.
В рамках одного набора данных возможно обращение только к одному источнику данных (включая внешние источники данных).
10.3.1.2.2. Набор данных – объект
Набор данных – объект используется для вывода в отчет информации из некоторого объекта встроенного языка: таблицы значений, результата запроса, текущего документа и т. п.
Этот «источник» данных описывается в схеме компоновки, затем он заполняется программным образом, например, по нажатию какой-то кнопки, и в качестве внешнего набора данных передается в процессор компоновки.
10.3.1.2.3. Набор данных – объединение
Набор данных – объединение содержит свойство Элементы, описывающее наборы данных, которые необходимо объединить.
Заметим, что значения полей набора данных – объединение будут получаться из полей вложенных наборов данных по их пути к данным. Так, в приведенном примере у внешнего набора данных будет поле СуммаРасх. Данные для него будут получаться из вложенных наборов данных, у которых путь к данным – СуммаРасход.
10.3.1.2.4. Поле набора данных схемы компоновки данных
Набор данных может содержать описания полей, которые будут доступны для этого набора данных.
Поля набора данных описываются в свойстве Поля наборов данных, которое содержит коллекцию значений, состоящую из элементов ПолеНабораДанныхСхемыКомпоновкиДанных.
10.3.1.3. Связи наборов данных
Наборы данных, присутствующие в схеме компоновки данных, могут быть связаны друг с другом.
Связи наборов данных описываются в свойстве СвязиНаборовДанных схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов СвязьНаборовДанныхСхемыКомпоновкиДанных.
10.3.1.4. Вычисляемые поля
В схеме компоновки данных существует возможность описать поля, которые будут вычисляться по некоторым выражениям с использованием полей наборов данных. Данные поля могут быть использованы в настройках точно так же, как поля набора данных, за исключением следующего: не поддерживается использование реквизитов вычисляемых полей, не поддерживается иерархическая группировка по вычисляемым полям.
Вычисляемые поля описываются в свойстве ВычисляемыеПоляСхемыКомпоновкиДанных схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ВычисляемоеПолеСхемыКомпоновкиДанных.
10.3.1.5. Поля ресурсов
В схеме компоновки данных возможно описание полей ресурсов, значения которых будут вычисляться для групповых записей. Осуществляется это при помощи описания поля итога.
Поля итога описываются в свойстве ПоляИтога схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ПолеИтогаСхемыКомпоновкиДанных. При расчете ресурсов каждая запись набора данных, для которого рассчитывается ресурс, участвует в расчете ресурса только один раз.
10.3.1.6. Параметры
Схема компоновки данных содержит описание параметров данных.
Параметры данных описываются в свойстве Параметры схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ПараметрСхемыКомпоновкиДанных.
Для параметра можно указать признак обязательности использования параметров и запрет незаполненного параметра. Например, с помощью комбинации этих признаков можно реализовать параметр, без заполнения которого формирование отчета невозможно.
10.3.1.7. Вложенные схемы
Схема компоновки данных может содержать описания вложенных схем компоновки данных.
Вложенные схемы компоновки данных описываются в свойстве ВложенныеСхемыКомпоновкиДанных схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ВложеннаяСхемаКомпоновкиДанных.
10.3.1.8. Макеты
В схеме компоновки данных можно описать макеты, которые будут использоваться для вывода поля или группировки. При указании макета для поля или группировки указывается имя макета, описанного в данном свойстве.
Макеты описываются в свойстве Макеты схемы компоновки данных. Свойство содержит коллекцию значений, состоящую из элементов ОписаниеМакетаСхемыКомпоновкиДанных.
10.3.1.9. Макеты полей
Для каждого поля в схеме компоновки данных может быть указано имя макета, используемого для вывода данного поля в результат компоновки.

Рис. 348. Макеты полей
Связь поля с макетом описывается с помощью объекта МакетПоляСхемыКомпоновкиДанных. Коллекция этих объектов содержится в свойстве МакетыПолей объекта СхемаКомпоновкиДанных.
10.3.1.10. Макеты группировок
Для каждой группировки в схеме компоновки данных можно указать имя макета, который будет использоваться при выводе данной группировки.
Связь группировки с макетом описывается с помощью объекта МакетГруппировкиСхемыКомпоновкиДанных. Коллекция этих объектов содержится в свойстве МакетыГруппировок объекта СхемаКомпоновкиДанных.
10.3.1.11. Макеты заголовков группировок
Для каждой группировки могут описываться также макеты заголовков группировок.
Связь заголовка группировки с макетом описывается с помощью объекта МакетГруппировкиСхемыКомпоновкиДанных (см. предыдущий раздел). Коллекция этих объектов содержится в свойстве МакетыЗаголовковГруппировок объекта СхемаКомпоновкиДанных.
10.3.1.12. Настройки по умолчанию
Каждый вариант отчета, который задан в схеме компоновки данных, содержит настройки компоновки данных по умолчанию, которые могут быть заданы разработчиком. При этом вариантом по умолчанию будет считаться тот вариант, который стоит первым в списке вариантов настроек системы компоновки данных (вариант Диаграмма по периодам на рис.349). Настройки варианта по умолчанию будут применяться при первом открытии отчета, при выборе команды Еще – Стандартные настройки (Все действия – Стандартные настройки), а также могут быть использованы для программной установки настроек по умолчанию.

Рис. 349. Вариант по умолчанию
Подробнее о настройках компоновки данных см. здесь.
10.3.2. Работа с несколькими наборами данных
Система компоновки данных позволяет использовать в одной компоновке несколько наборов данных.
Для того чтобы в одной компоновке использовать несколько наборов данных, необходимо внести в схему описания наборов данных, которые предполагается использовать, и указать связи между наборами данных.
Рассмотрим следующий пример.
Запишем три набора данных: ПрайсЛист, Остатки и Продажи.

Рис. 350. Пример нескольких наборов данных
Опишем связи между наборами данных. Создадим связь между наборами данных ПрайсЛист и Остатки, а также связь между наборами данных ПрайсЛист и Продажи (см. рис.351).

Рис. 351. Связи наборов данных
Дополнительно опишем ресурсы (см. рис.352).

Рис. 352. Ресурсы схемы компоновки данных
Если в системе компоновки данных описывается связь между двумя наборами данных, то набор данных, к которому идет связь, будет считаться зависимым. Набор данных, от которого идет связь, будет считаться родительским по отношению к зависимому от него набору данных.

Рис. 353. Зависимые наборы данных
В приведенных примерах зависимыми наборами данных будут наборы данных Остатки и Продажи. А родительским по отношению к обоим этим наборам – ПрайсЛист.
В схеме компоновки данных нет указания типа связи. Все связи считаются левыми внешними соединениями. То есть запись родительского набора данных будет использоваться в компоновке даже в том случае, если для нее не найдены записи в зависимом наборе.
В макете компоновки данных (см. здесь) возможно указание типа связи. Тип связи генерируется компоновщиком макета в зависимости от накладываемых глобальных отборов. Если на поле набора данных, являющегося зависимым, накладывается глобальный отбор, генерируемые связи в макете компоновки данных от этого набора данных до всех его родительских наборов (вплоть до начала иерархии наборов данных) будут иметь тип Внутренняя. Это означает, что записи родительского набора данных будут участвовать в компоновке только в том случае, если будут найдены записи в зависимых наборах данных.
Например, если пользователь наложит глобальный отбор на поле Склад, наборы данных ПрайсЛист и Остатки будут связаны внутренней связью.

Рис. 354. Внутренняя связь
Если набор данных зависит от некоторого набора и в связи указана возможность использования списка параметров, данные из зависимого набора данных будут получаться порциями по 1000 записей. В случае, если использование списка параметров в связи не разрешено, записи будут получаться по одной.
Если и зависимый, и родительский набор данных содержит поле с одинаковым именем, данное поле будет получаться из родительского набора данных. В приведенных примерах поле Номенклатура всегда будет получаться из набора данных ПрайсЛист.

Рис. 355. Общее поле
Несвязанные наборы данных не могут содержать поля с одинаковыми именами, если у них нет общего родителя, в котором данное поле также присутствует. Так, наборы данных Остатки и Обороты могут содержать поле Номенклатура, но не могли бы оба содержать поле Контрагент.
В описании связи, в выражении источника, используются поля из набора данных источника (родительского набора); в выражении связи приемника используются поля набора данных приемника (зависимого набора данных). Так, при описании связи между наборами данных ПрайсЛист и Остатки выражение Номенклатура в свойстве ВыражениеИсточник использует поле набора данных ПрайсЛист, а выражение Номенклатура в свойстве ВыражениеПриемник использует поле набора данных Остатки.
В одной группировке не могут быть использованы поля из не связанных друг с другом наборов данных. При этом наборы данных, имеющие общие родительские наборы данных, связанными не считаются. Исключение сделано для полей-итогов, которые могут быть использованы в любой группировке. В приведенном примере мы не сможем в одной группировке задействовать поля Склад и Контрагент. Однако поля КоличествоОстаток и СуммаОборот сможем задействовать, т. к. они являются ресурсами.
Данные зависимого набора данных не могут быть получены без получения данных родительского набора. То есть при получении данных из зависимого набора автоматически будут получаться и данные из родительского набора (и всех родителей родителя). В нашем примере при получении набора данных Остатки будут получаться данные и из набора ПрайсЛист.
Если в группировке используются наборы данных из нескольких наборов данных, при исполнении компоновки будет осуществляться обход по последнему зависимому набору данных. Так, если в группировке будут использоваться поля наборов ПрайсЛист и Остатки, обход будет происходить по набору Остатки.
Если ни одного поля из связанного набора данных в настройках не задействовано, набор данных не будет включен в макет компоновки данных.
10.3.3. Расширение языка запросов для системы компоновки данных
Расширение языка запросов для системы компоновки данных осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса.
10.3.3.1. Синтаксические элементы расширения языка запросов системы компоновки данных
ВЫБРАТЬ
Описание:
В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки.
После псевдонима поля может находиться комбинация символов «.*», что обозначает возможность использования дочерних полей от данного поля.
Например, запись Номенклатура.* обозначает возможность использования дочерних полей поля Номенклатура (например, поля Номенклатура.Код). Элемент ВЫБРАТЬ может присутствовать только в первом запросе объединения.
Пример:
Копировать в буфер обмена{ВЫБРАТЬ Номенклатура, Склад}
ГДЕ
Описание:
Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ.
Если значения параметров не заданы, то предложение ГДЕ в результирующий запрос не включается.
Пример:
Копировать в буфер обмена{ГДЕ Номенклатура.*, Склад }
{ГДЕ Документ.Дата >= &ДатаНачала, Документ.Дата <= &ДатаКонца}
ХАРАКТЕРИСТИКИ
Описание:
Для обеспечения работы с характеристиками в расширение языка запросов для системы компоновки данных введен синтаксис описания характеристик.
В примере (см. далее) описываются характеристики для полей типа Ссылка на справочник Номенклатура.
В характеристиках описываются следующие свойства:
● ТИП – имя типа, для которого описываются характеристики.
● ВИДЫХАРАКТЕРИСТИК – имя таблицы или запрос для получения списка характеристик. В запросе допустимо использовать ключевое слово РАЗРЕШЕННЫЕ. В этом случае в списке характеристик будут присутствовать только те характеристики, которые допускаются для пользователя наложенными ограничениями доступа к данным.
Если список характеристик указан не запросом, а именем таблицы, то в запросе получения списка характеристик, который формирует система, также используется ключевое слово РАЗРЕШЕННЫЕ.
● ПОЛЕКЛЮЧА – имя поля, содержащего идентификатор характеристики.
● ПОЛЕИМЕНИ – имя поля, содержащего имя характеристики.
● ПОЛЕТИПАЗНАЧЕНИЯ – имя поля, содержащего тип значения характеристики. Если тип значения не указан, считается, что характеристика имеет тип Булево.
● ЗНАЧЕНИЯХАРАКТЕРИСТИК – имя таблицы или запрос для получения значений характеристик.
● ПОЛЕОБЪЕКТА – имя поля, содержащего идентификатор объекта (например, ссылка номенклатуры).
● ПОЛЕВИДА – имя поля, содержащего идентификатор характеристики.
● ПОЛЕЗНАЧЕНИЯ – имя поля, содержащего значение характеристики. Если не указано, значение будет равно Истина (если такая характеристика у объекта есть), Ложь – в противном случае.
Пример:
Копировать в буфер обмена{ХАРАКТЕРИСТИКИ ТИП(Справочник.Номенклатура)
ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
ВидыДопСвойств.Ссылка,
ВидыДопСвойств.Наименование,
ВидыДопСвойств.ТипЗначения
ИЗ
ПланВидовХарактеристик.ВидыДопСвойств КАК ВидыДопСвойств)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ДопСвойства
ПОЛЕОБЪЕКТА Номенклатура
ПОЛЕВИДА ВидСвойства
ПОЛЕЗНАЧЕНИЯ Свойство
}
Параметры
Описание:
Кроме основных элементов система компоновки данных принимает элементы, записанные в параметрах виртуальных таблиц. В таких случаях тип полей зависит от типа параметра, в котором располагаются элементы.
Поля ДатаНачала, ДатаКонца, Номенклатура и Склад (см. пример) станут доступными в отборе, т. е. пользователь сможет применять для них фильтры.
Пример:
Копировать в буфер обменаВЫБРАТЬ УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура, УчетНоменклатурыОбороты.Склад КАК Склад, УчетНоменклатурыОбороты.КоличествоПриход КАК КоличествоПриход, УчетНоменклатурыОбороты.КоличествоРасход КАК КоличествоРасход ИЗ РегистрНакопления.УчетНоменклатуры.Обороты({&ДатаНачала}, {&ДатаКонца}, , {Номенклатура.*, Склад.*}) КАК УчетНоменклатурыОбороты
10.3.3.2. Автоматическое заполнение доступных полей
При автоматическом заполнении доступных полей запроса выполняются следующие действия:
● все поля списка выборки и их дочерние поля становятся доступными для выбора, упорядочивания, группировки, отбора и др.;
● параметры виртуальных таблиц становятся доступными для отбора.
10.3.4. Язык выражений системы компоновки данных
Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных подсистемах. Выражения используются в следующих подсистемах:
● схема компоновки данных – для описания вычисляемых полей, полей итогов, выражений связи и т. д.;
● настройки компоновки данных – для описания выражений пользовательских полей;
● макет компоновки данных – для описания выражений связи наборов данных, описания параметров макета и т. д.
Примечание. В языке выражений компоновки данных отсутствует возможность получения поля через точку от выражения.
Внимание! Вычисление выражения системы компоновки данных происходит в безопасном режиме (см. здесь).
10.3.4.1. Литералы
В выражении могут присутствовать литералы типов, описанных далее.
Строка
Описание:
Строковый литерал записывается в символах «"».
При необходимости использования внутри строкового литерала символа «"» следует использовать два таких символа.
Пример:
Копировать в буфер обмена"Литерал ""в кавычках"""
Число
Описание:
Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.».
Пример:
Копировать в буфер обмена10.5 200
Дата
Описание:
Литерал типа Дата записывается при помощи ключевого слова ДАТАВРЕМЯ (DATETIME). После данного ключевого слова в скобках, через запятую, перечисляются год, месяц, день, часы, минуты, секунды. Указание времени необязательно.
Пример:
Копировать в буфер обмена// Шестое января 1975 года ДАТАВРЕМЯ(1975, 1, 06) // Второе декабря 2006 года, 23 часа 56 минут 57 секунд ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57)
Булево
Описание:
Булевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False).
Значение
Описание:
Для указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово ЗНАЧЕНИЕ, после которого в скобках идет указание имени литерала.
Пример:
Копировать в буфер обменаЗНАЧЕНИЕ(ВидСчета.Активный)
Поля
Описание:
В выражениях могут использоваться поля наборов данных. Поле идентифицируется путем к данным. Части пути к данным отделяются друг от друга символом «.». Имя поля не является чувствительным к регистру. Если путь к данным содержит идентификатор с пробелами или специальными символами, то такие идентификаторы следует заключать в квадратные скобки.
Пример:
Копировать в буфер обменаНоменклатура.Артикул Продажи.СуммаОборот Продажи.[Сумма оборот]
Параметры
Описание:
Выражения могут использовать параметры. Для использования в выражении параметра достаточно написать его имя, которому будет предшествовать символ «&».
Пример:
Копировать в буфер обмена&Контрагент &ДатаНачала
Тип
Описание:
Формирует значение типа Тип. Тип задается при помощи ключевого слова Тип.
Пример:
Копировать в буфер обменаТип("Строка")
10.3.4.2. Операции над числами
Унарный "-"
Описание:
Данная операция предназначена для изменения знака числа на обратный.
Пример:
Копировать в буфер обмена-Продажи.Количество
Унарный "+"
Описание:
Данная операция не выполняет над числом никаких действий.
Пример:
Копировать в буфер обмена+Продажи.Количество
Бинарный "-"
Описание:
Данная операция предназначена для вычисления разности двух чисел.
Пример:
Копировать в буфер обменаОстИОбрт.НачальныйОстаток – ОстИОбрт.КонечныйОстаток ОстИОбрт.НачальныйОстаток – 100 400 – 357
Бинарный "+"
Описание:
Данная операция предназначена для вычисления суммы двух чисел.
Пример:
Копировать в буфер обменаОстИОбрт.НачальныйОстаток + ОстИОбрт.Оборот ОстИОбрт.НачальныйОстаток + 100 400 + 357
Произведение "*"
Описание:
Данная операция предназначена для вычисления произведения двух чисел.
Пример:
Копировать в буфер обменаНоменклатура.Цена * 1.2 2 * 3.14
Деление "/"
Описание:
Данная операция предназначена для получения результата деления одного операнда на другой.
Пример:
Копировать в буфер обменаНоменклатура.Цена / 1.2 2 / 3.14
Остаток от деления "%"
Описание:
Данная операция предназначена для получения остатка от деления одного операнда на другой.
Пример:
Копировать в буфер обменаНоменклатура.Цена % 1.2 2 % 3.14
10.3.4.3. Операции над строками
Конкатенация (Бинарный "+")
Описание:
Данная операция предназначена для конкатенации двух строк.
Пример:
Копировать в буфер обменаНоменклатура.Артикул + ": "+ Номенклатура.Наименование
ПОДОБНО (LIKE)
Описание:
Данная операция проверяет соответствие строки переданному шаблону.
Значением оператора ПОДОБНО является Истина, если значение выражения удовлетворяет шаблону, и Ложь – в противном случае.
Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки:
● «%» – процент: последовательность, содержащая ноль и более произвольных символов.
● «_» – подчеркивание: один произвольный символ.
● «[…]» – один или несколько символов в квадратных скобках: один символ, любой из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
● «[^…]» – в квадратных скобках значок отрицания, за которым следует один или несколько символов: любой символ, кроме тех, которые перечислены следом за значком отрицания.
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать спецсимвол, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).
Например, приведенный ниже шаблон означает подстроку, состоящую из последовательности символов:
● буквы А,
● буквы Б,
● буквы В,
● одной цифры,
● одной из букв а, б, в или г,
● символа подчеркивания,
● буквы а,
● буквы б,
● буквы в.
Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.
Пример:
Копировать в буфер обмена"%АБВ[0-9][абвг]\_абв%" СПЕЦСИМВОЛ "\"
10.3.4.4. Операции сравнения
Равно (=)
Описание:
Данная операция предназначена для сравнения двух операндов на равенство.
Пример:
Копировать в буфер обменаПродажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик
Не равно (<>)
Описание:
Данная операция предназначена для сравнения двух операндов на неравенство.
Пример:
Копировать в буфер обменаПродажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик
Меньше (<)
Описание:
Данная операция предназначена для проверки того, что первый операнд меньше второго.
Пример:
Копировать в буфер обменаПродажиТекущие.Сумма < ПродажиПрошлые.Сумма
Больше (>)
Описание:
Данная операция предназначена для проверки того, что первый операнд больше второго.
Пример:
Копировать в буфер обменаПродажиТекущие.Сумма > ПродажиПрошлые.Сумма
Меньше или равно (<=)
Описание:
Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму.
Пример:
Копировать в буфер обменаПродажиТекущие.Сумма <= ПродажиПрошлые.Сумма
Больше или равно (>=)
Описание:
Данная операция предназначена для проверки того, что первый операнд больше либо равен второму.
Пример:
Копировать в буфер обменаПродажиТекущие.Сумма >= ПродажиПрошлые.Сумма
Строка начинается с подстроки (НачинаетсяС/BeginsWith)
Описание:
Данная операция осуществляет проверку того, что проверяемое значение начинается на строку, указанную в условии. Условие может быть указано непосредственным значением и шаблоном. Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки:
● «/» – следующий символ надо интерпретировать как обычный символ.
● «%» – процент: последовательность, содержащая ноль и более произвольных символов.
● «_» – подчеркивание: один произвольный символ.
Строка не начинается с подстроки (НеНачинаетсяС/NotBeginsWith)
Описание:
Данная операция осуществляет проверку того, что проверяемое значение не начинается на строку, указанную в условии. Условие может быть указано непосредственным значением и шаблоном. Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки:
● «/» – следующий символ надо интерпретировать как обычный символ.
● «%» – процент: последовательность, содержащая ноль и более произвольных символов.
● «_» – подчеркивание: один произвольный символ.
Строка удовлетворяет шаблону (Подобно/Like)
Описание:
Данная операция осуществляет проверку того, что проверяемое значение удовлетворяет заданному шаблону. Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки:
● «/» – следующий символ надо интерпретировать как обычный символ.
● «%» – процент: последовательность, содержащая ноль и более произвольных символов.
● «_» – подчеркивание: один произвольный символ.
Строка не удовлетворяет шаблону (НеПодобно/NotLike)
Описание:
Данная операция осуществляет проверку того, что проверяемое значение не удовлетворяет заданному шаблону. Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки:
● «/» – следующий символ надо интерпретировать как обычный символ.
● «%» – процент: последовательность, содержащая ноль и более произвольных символов.
● «_» – подчеркивание: один произвольный символ.
Операция проверки вхождения в список (В/IN)
Описание:
Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, если значение найдено, или Ложь – в противном случае.
Пример:
Копировать в буфер обменаНоменклатура В (&Товар1, &Товар2)
Операция проверки наличия значения в наборе данных (В/IN)
Описание:
Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле.
Пример:
Копировать в буфер обменаПродажи.Контрагент В Контрагенты
Операция проверки значения на NULL (ЕСТЬ NULL/IS NULL)
Описание:
Данная операция возвращает значение Истина, если оно является значением NULL.
Пример:
Копировать в буфер обменаПродажи.Контрагент ЕСТЬ NULL
Операция проверки значения на неравенство NULL (ЕСТЬ НЕ NULL/IS NOT NULL)
Описание:
Данная операция возвращает значение Истина, если оно не является значением NULL.
Пример:
Копировать в буфер обменаПродажи.Контрагент ЕСТЬ НЕ NULL
10.3.4.5. Логические операции
Логические операции принимают в качестве операндов выражения, имеющие тип Булево.
Операция НЕ (NOT)
Описание:
Операция НЕ возвращает значение Истина, если ее операнд имеет значение Ложь, и значение Ложь, если ее операнд имеет значение Истина.
Пример:
Копировать в буфер обменаНЕ Документ.Грузополучатель = Документ.Грузоотправитель
Операция И (AND)
Описание:
Операция И возвращает значение Истина, если оба операнда имеют значение Истина, и значение Ложь, если один из операндов имеет значение Ложь, например:
Пример:
Копировать в буфер обменаДокумент.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент
Операция ИЛИ (OR)
Описание:
Операция ИЛИ возвращает значение Истина, если один из операндов имеет значение Истина, и Ложь, если оба операнда имеют значение Ложь.
Пример:
Копировать в буфер обменаДокумент.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент
10.3.4.6. Агрегатные функции
Агрегатные функции осуществляют некоторое действие над набором данных.
СУММА (SUM)
Синтаксис:
Сумма(Выражение)
Описание:
Агрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаСУММА(Продажи.СуммаОборот)
КОЛИЧЕСТВО (COUNT)
Синтаксис:
Количество(Выражение)
Описание:
Функция Количество рассчитывает количество значений, отличных от значения NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаКОЛИЧЕСТВО(Продажи.Контрагент)
КОЛИЧЕСТВО (РАЗЛИЧНЫЕ) (COUNT (DISTINCT))
Синтаксис:
Количество(Различные Выражение)
Описание:
Эта функция рассчитывает количество различных значений. Для получения различных значений следует перед параметром метода Количество указать Различные (Distinct). В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаКОЛИЧЕСТВО(Различные Продажи.Контрагент)
МАКСИМУМ (MAX)
Синтаксис:
Максимум(Выражение)
Описание:
Функция получает максимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаМАКСИМУМ(Остатки.Количество)
МИНИМУМ (MIN)
Синтаксис:
Минимум(Выражение)
Описание:
Функция получает минимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаМИНИМУМ(Остатки.Количество)
СРЕДНЕЕ (AVG)
Синтаксис:
Среднее(Выражение)
Описание:
Функция получает среднее значение для значений, отличных от NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.
Пример:
Копировать в буфер обменаСРЕДНЕЕ(Остатки.Количество)
МАССИВ (ARRAY)
Синтаксис:
Массив([Различные] Выражение)
Описание:
Функция формирует массив, содержащий значение выражения для каждой детальной записи.
В качестве параметра можно использовать таблицу значений. При этом результатом работы функции будет массив, содержащий значения первой колонки таблицы значений, переданной в качестве параметра.
Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным.
Если указано ключевое слово Различные, то получаемый массив не будет содержать дублирующихся значений.
Пример:
Копировать в буфер обменаФункцииОтчетов.СтандартноеОтклонение(Массив(Сумма))
ТАБЛИЦАЗНАЧЕНИЙ (VALUETABLE)
Синтаксис:
ТаблицаЗначений([Различные] Выражение1 [КАК ИмяКолонки1][, Выражение2 [КАК ИмяКолонки2]], …)
Описание:
Функция формирует таблицу значений, содержащую столько колонок, сколько параметров у функции. Детальные записи получаются из наборов данных, которые нужны для вычисления всех выражений, указанных в параметрах функции.
Если параметрами функции выступают поля-остатки, то в результирующую таблицу значений попадут значения для записей по уникальным комбинациям измерений из других периодов. При этом значения получаются только для полей-остатков, измерений, счетов, полей периодов и их реквизитов. Значения остальных полей в записях из других периодов считаются равными NULL.
Если выражение содержит функцию ТаблицаЗначений, то считается, что данное выражение является агрегатным.
Если указано ключевое слово Различные, то в получаемой таблице значений не будет строк, содержащих одинаковые данные.
Для каждой колонки можно задать имя с помощью ключевого слова КАК, следующего после выражения, формирующего значение колонки.
Пример:
Копировать в буфер обменаФункцииОтчетов.ТаблицуЗначенийВСтроку(ТаблицаЗначений(Склад КАК Склад, КоличествоОстаток КАК Остаток))
СВЕРНУТЬ (GROUPBY)
Синтаксис:
Свернуть(<Выражение>, <НомераКолонок>)
Описание:
Функция предназначена для удаления дубликатов из массива.
Параметры:
<Выражение>
Тип: Массив или ТаблицаЗначений. Для значения, расположенного в данном формальном параметре, выполняется удаление дубликатов.
<НомераКолонок>
Тип Строка. Используется, если параметр Выражение имеет тип ТаблицаЗначений. Номера или имена (через запятую) колонок таблицы значений, среди которых нужно искать дубликаты. По умолчанию все колонки.
Пример:
Копировать в буфер обменаСвернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона");
ПОЛУЧИТЬЧАСТЬ (GETPART)
Синтаксис:
ПолучитьЧасть(<Выражение>, <НомерКолонок>)
Описание:
Функция получает таблицу значений, которая содержит указанные колонки исходной таблицы значений.
Параметры:
<Выражение>
Тип: ТаблицаЗначений. Таблица значений, из которой нужно получить колонки.
<НомераКолонок>
Тип: Строка. Номера или имена (через запятую) колонок таблицы значений, которые нужно получить.
Возвращаемое значение:
Таблица значений, содержащая только те колонки, которые указаны в параметре НомераКолонок.
Пример:
Копировать в буфер обменаПолучитьЧасть(Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"),"НомерТелефона");
УПОРЯДОЧИТЬ (ORDER)
Синтаксис:
Упорядочить(<Выражение>, <НомераКолонок>)
Описание:
Предназначена для упорядочивания элементов массива и таблицы значений.
Параметры:
<Выражение>
Тип: Массив или ТаблицаЗначений. Объект, который требуется упорядочить.
<НомераКолонок>
Используется, если параметр Выражение имеет тип ТаблицаЗначений. Номера или имена (через запятую) колонок таблицы значений, которые требуется упорядочить. По умолчанию все колонки.
После каждой колонки может содержаться направление упорядочивания или признак автоматического упорядочивания.
Возвращаемое значение:
Массив или таблица значений, которые упорядочены в соответствии с переданными параметрами.
Пример:
Копировать в буфер обменаУпорядочить(ТаблицаЗначений(НомерТелефона, Адрес, ДатаЗвонка),"ДатаЗвонка Убыв");
СОЕДИНИТЬСТРОКИ (JOINSTRINGS)
Синтаксис:
СоединитьСтроки(<Значения>, <РазделительЭлементов>, <РазделительКолонок>)
Описание:
Предназначена для объединения строк в одну строку.
Параметры:
<Значения>
Значения, строковые представления которых нужно объединить в одну строку. Если типом значения параметра является Массив, то в строку будут объединяться элементы массива. Если типом значения параметра является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы.
<РазделительЭлементов>
Тип: Строка. Содержит текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию символ перевода строк.
<РазделительКолонок>
Тип: Строка. Содержит текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию "; ".
Возвращаемое значение:
Объединенная строка.
Пример:
Копировать в буфер обменаСоединитьСтроки(ТаблицаЗначений(НомерТелефона, Адрес));
ГРУППОВАЯОБРАБОТКА (GROUPPROCESSING)
Синтаксис:
ГрупповаяОбработка(<Выражения>, <ВыраженияИерархии>, <ИмяГруппировки>)
Описание:
Формируется таблица значений, содержащая значения параметров (в колонках) для каждой групповой записи (в строках). В случае использования иерархической группировки каждый уровень иерархии обрабатывается отдельно. Значения для иерархических записей также помещаются в таблицу данных. В возвращаемом объекте эта таблица значений будет размещена в свойстве Данные.
В свойство ТекущийЭлемент помещается строка передаваемой таблицы значений, для которой в настоящий момент вычисляется функция.
При реализации функции, которая в качестве параметра может принимать данные групповой обработки, следует учитывать, что в качестве значения в функцию может быть передано значение NULL. Например, такое может произойти в случае расчета функции ГрупповаяОбработка() с указанием имени группировки, которая в настоящий момент недоступна.
Параметры:
<Выражения>
Строка с перечисленными через запятую выражениями, которые нужно вычислить. После каждого выражения возможно наличие необязательного ключевого слова КАК и имени колонки результирующей таблицы значений. Каждое выражение описывает колонку формируемой таблицы значений.
<ВыраженияИерархии>
Выражения, которые нужно вычислить для иерархических записей. Аналогично параметру Выражения с тем отличием, что параметр Выражения используется для неиерархических записей, а параметр ВыраженияИерархии используется для иерархических записей. Если параметр не указан, то для вычисления значений для иерархических записей используется выражения, указанные в параметре Выражение.
<ИмяГруппировки>
Имя группировки, в которой нужно вычислять группировку обработки. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя именем группировки в результирующем макете. Если группировка недоступна, то функция будет заменена на значение NULL.
Возвращаемое значение:
Объект ДанныеГрупповойОбработкиКомпоновкиДанных.
Пример:
Пример реализации функции ABCКлассификация(), которая возвращает значение 1, если значение составляет 75 % от общей суммы, 2, если процент между 75 % и 95 %, и 3 в других случаях.
Копировать в буфер обмена// Рассчитать ABC классификацию. Функция ABCКлассификация(Данные) Экспорт Перем ТаблицаЗначений; Если Данные = Null Тогда Возврат Null; КонецЕсли; Если ТипЗнч(Данные) <> Тип("ДанныеГрупповойОбработкиКомпоновкиДанных") Тогда Сообщить(ТипЗнч(Данные)); ВызватьИсключение "В функцию ABCКлассификация() можно передавать только объект типа ДанныеГрупповойОбработкиКомпоновкиДанных"; КонецЕсли; Если Не Данные.ВременныеДанныеОбработки.Свойство("ABCКлассификацияТаблицаЗначений", ТаблицаЗначений) Тогда // выполним расчет классификации один раз при первом вызове // а потом запомним выполненный расчет и дальше будем этот // расчет использовать ТаблицаЗначений = Данные.Данные.Скопировать(); ТаблицаЗначений.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число")); Номер = 0; ОбщаяСумма = 0; Для Каждого СтрокаТаблицыЗначений Из ТаблицаЗначений Цикл СтрокаТаблицыЗначений.Номер = Номер; Номер = Номер + 1; Если СтрокаТаблицыЗначений[0] <> NULL Тогда ОбщаяСумма = ОбщаяСумма + СтрокаТаблицыЗначений[0]; КонецЕсли; КонецЦикла; ТаблицаЗначений.Сортировать(ТаблицаЗначений.Колонки[0].Имя + " Убыв"); ТаблицаЗначений.Индексы.Добавить("Номер"); НакопленнаяСумма = 0; ИндексКлассаA = Неопределено; ИндексКлассаB = Неопределено; Для Каждого СтрокаТаблицыЗначений Из ТаблицаЗначений Цикл Если СтрокаТаблицыЗначений[0] <> NULL Тогда НакопленнаяСумма = НакопленнаяСумма + СтрокаТаблицыЗначений[0]; КонецЕсли; Если ОбщаяСумма = 0 Тогда Процент = 1; Иначе Процент = НакопленнаяСумма / ОбщаяСумма; КонецЕсли; Если Процент > 0.75 Тогда Если ИндексКлассаA = Неопределено Тогда ИндексКлассаA = ТаблицаЗначений.Индекс(СтрокаТаблицыЗначений); ИначеЕсли Процент > 0.90 Тогда Если ИндексКлассаB = Неопределено Тогда ИндексКлассаB = ТаблицаЗначений.Индекс(СтрокаТаблицыЗначений); КонецЕсли; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияТаблицаЗначений", ТаблицаЗначений); Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияИндексКлассаA", ИндексКлассаA); Данные.ВременныеДанныеОбработки.Вставить("ABCКлассификацияИндексКлассаB", ИндексКлассаB); КонецЕсли; Если Данные.ТекущийЭлемент = Неопределено Тогда // Итог по группировке. Возврат Null; Иначе Строка = ТаблицаЗначений.Найти(Данные.Данные.Индекс(Данные.ТекущийЭлемент), "Номер"); Если Строка = Неопределено Тогда Возврат Null; Иначе Индекс = ТаблицаЗначений.Индекс(Строка); Если Индекс <= Данные.ВременныеДанныеОбработки.ABCКлассификацияИндексКлассаA Тогда Возврат 1; ИначеЕсли Индекс <= Данные.ВременныеДанныеОбработки.ABCКлассификацияИндексКлассаB Тогда Возврат 2; Иначе Возврат 3; КонецЕсли; КонецЕсли; КонецЕсли; КонецФункции
В выражении компоновки для получения класса можно использовать следующее выражение (например, в ресурсе или пользовательском поле):
Копировать в буфер обменаABCКлассификация(ГрупповаяОбработка("Сумма(СуммаОборот)"))
КАЖДЫЙ (EVERY)
Синтаксис:
Каждый(<X>)
Описание:
Агрегатная функция Каждый определяет наличие в переданном наборе хотя бы одного значения Ложь.
Возвращаемое значение:
Истина – если в переданном наборе не содержится значения Ложь.
Ложь – если в переданном наборе содержится хотя бы одно значение Ложь.
ЛЮБОЙ (ANY)
Синтаксис:
Любой(<X>)
Описание:
Агрегатная функция Любой определяет наличие в переданном наборе хотя бы одного значения Истина.
Возвращаемое значение:
Истина – если в переданном наборе содержится хотя бы одно значение Истина.
Ложь – если в переданном наборе не содержится значения Истина.
СТАНДАРТНОЕОТКЛОНЕНИЕГЕНЕРАЛЬНОЙСОВОКУПНОСТИ (STDDEV_POP)
Синтаксис:
СтандартноеОтклонениеГенеральнойСовокупности(<X>)
Описание:
Вычисляет стандартное отклонение генеральной совокупности переданного набора.
Вычисление выполняется по формуле: SQRT(ДисперсияГенеральнойСовокупности(X)).
Возвращаемое значение:
Результат вычисления функции.
СТАНДАРТНОЕОТКЛОНЕНИЕВЫБОРКИ(STDDEV_SAMP)
Синтаксис:
СтандартноеОтклонениеВыборки(<X>)
Описание:
Вычисляет стандартное отклонение выборки переданного набора.
Вычисление выполняется по формуле: SQRT(ДисперсияВыборки(X)).
Возвращаемое значение:
Результат вычисления функции.
ДИСПЕРСИЯВЫБОРКИ (VAR_SAMP)
Синтаксис:
ДисперсияВыборки(<X>)
Описание:
Вычисляет выборочную дисперсию для переданного набора.
Вычисление выполняется по формуле: (SUM(X2)-SUM(X)2/COUNT(X))/(COUNT(X)-1). Если количество записей в наборе равно 1 (COUNT(X)=1), возвращаемое значение равно NULL.
Возвращаемое значение:
Результат вычисления функции.
ДИСПЕРСИЯГЕНЕРАЛЬНОЙСОВОКУПНОСТИ (VAR_POP)
Синтаксис:
ДисперсияГенеральнойСовокупности(<X>)
Описание:
Вычисляет дисперсию генеральной совокупности для переданного набора. Значения NULL игнорируются.
Вычисление выполняется по формуле: (SUM(X2)-SUM(X)2/COUNT(X))/(COUNT(X)).
Возвращаемое значение:
Результат вычисления функции.
КОВАРИАЦИЯГЕНЕРАЛЬНОЙСОВОКУПНОСТИ (COVAR_POP)
Синтаксис:
КовариацияГенеральнойСовокупности(<Y>, <X>)
Описание:
Вычисляет ковариацию совокупности множества пар переданных наборов.
Вычисление выполняется по формуле: (SUM(Y*X)-SUM(X)*SUM(Y)/N)/N. N – число пар значений X и Y из переданных наборов, где ни значение X, ни значение Y не равны NULL. Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
КОВАРИАЦИЯВЫБОРКИ (COVAR_SAMP)
Синтаксис:
КовариацияВыборки(<Y>, <X>)
Описание:
Вычисляет образец ковариации множества пар переданных наборов.
Вычисление выполняется по формуле: (SUM(Y*X)-SUM(Y)*SUM(X)/N)/(N-1). N – число пар значений X и Y из переданных наборов, где ни значение X, ни значение Y не равны NULL. Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции или NULL – если функция применяется к пустым множествам.
КОРРЕЛЯЦИЯ (CORR)
Синтаксис:
Корреляция(<Y>, <X>)
Описание:
Вычисляет коэффициент корреляции множества пар переданных наборов. Вычисление выполняется по формуле: КовариацияГенеральнойСовокупности(Y, X)/(СтандартноеОтклонениеГенеральнойСовокупности(Y)* СтандартноеОтклонениеГенеральнойСовокупности(X)). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции или NULL – если функция применяется к пустым множествам.
РЕГРЕССИЯНАКЛОН (REGR_SLOPE)
Синтаксис:
РегрссияНаклон(<Y>, <X>)
Описание:
Вычисляет наклон линии.
Вычисление выполняется по формуле: КовариацияГенеральнойСовокупности(Y, X)/ДисперсияГенеральнойСовокупности(X). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯОТРЕЗОК (REGR_INTERCEPT)
Синтаксис:
РегрессияОтрезок(<Y>, <X>)
Описание:
Вычисляет Y-точку пересечения линии регресса.
Вычисление выполняется по формуле: Среднее(Y)-РегрессияНаклон(Y, X)*Среднее(X). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯКОЛИЧЕСТВО (REGR_COUNT)
Синтаксис:
РегрессияКоличество(<Y>, <X>)
Описание:
Вычисляет количество пар, не содержащих NULL.
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯ_R2 (REGR_R2)
Синтаксис:
Регрессия_R2(<Y>, <X>)
Описание:
Вычисляет коэффициент детерминации для регрессии. Функция вычисляется без учета пар значений, содержащих значение NULL.
Возвращаемое значение:
● NULL, если ДисперсияГенеральнойСовокупности(X) равно 0.
● 1, если ДисперсияГенеральнойСовокупности(Y) равно 0 и ДисперсияГенеральнойСовокупности(X) не равно 0.
● Pow(Корреляция(Y, X), 2), если ДисперсияГенеральнойСовокупности(Y) больше 0 и ДисперсияГенеральнойСовокупности(X) не равно 0.
РЕГРЕССИЯСРЕДНЕЕX (REGR_AVGX)
Синтаксис:
РегрессияСреднееX(<Y>, <X>)
Описание:
Вычисляет среднее из независимых переменных <X> для линии регрессии, после исключения пар, где хотя бы одно значение равно NULL.
Вычисление выполняется по формуле: Среднее(X).
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯСРЕДНЕЕY (REGR_AVGY)
Синтаксис:
РегрессияСреднееY(<Y>, <X>)
Описание:
Вычисляет среднее из зависимых переменных <Y> для линии регрессии, после исключения пар, где хотя бы одно значение равно NULL.
Вычисление выполняется по формуле: Среднее(Y).
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯSXX (REGR_SXX)
Синтаксис:
РегрессияSXX(<Y>, <X>)
Описание:
Выполняет расчет по следующей формуле:
РегрессияКоличество(Y, X) * ДисперсияГенеральнойСовокупоности(X). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯSYY (REGR_SYY)
Синтаксис:
РегрессияSYY(<Y>, <X>)
Описание:
Выполняет расчет по следующей формуле:
РегрессияКоличество(Y, X) * ДисперсияГенеральнойСовокупоности(Y). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
РЕГРЕССИЯSXY (REGR_SXY)
Синтаксис:
РегрессияSXY(<Y>, <X>)
Описание:
Выполняет расчет по следующей формуле:
РегрессияКоличество(Y, X) * КовариацияГенеральнойСовокупоности(Y, X). Пары, где есть хотя бы одно значение NULL, игнорируются.
Возвращаемое значение:
Результат вычисления функции.
МЕСТОВПОРЯДКЕ (RANK)
Синтаксис:
МестоВПорядке(<Порядок>, <ПорядокИерархии>, <ИмяГруппировки>)
Описание:
Функция вычисляет, какое место имеет текущая запись среди записей текущей группировки, если ее упорядочить в порядке, указанном в параметрах функции. Нумерация начинается с 1.
Параметры:
<Порядок>
Тип: Строка. Содержит выражения, в последовательности которых нужно расположить групповые записи, разделенные через запятую. Направление упорядочивания управляется при помощи слов Возр, Убыв. После поля также можно указать строку Автоупорядочивание, что обозначает, что при упорядочивании ссылок нужно использовать поля упорядочивания, определенные для объекта, на который указывает ссылка. Если последовательность не указана, то значение рассчитывается в последовательности группировки.
<ПорядокИерархии>
Тип: Строка. Строка, содержащая выражения упорядочивания для иерархических записей.
<ИмяГруппировки>
Тип: Строка. Имя группировки, в которой нужно вычислять функцию. Если не указано, то вычисление происходит в текущей группировке. Если вычисление выполняется в таблице и параметр содержит пустую строку или не указан, то значение вычисляется для группировки-строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
Возвращаемое значение:
Номер по порядку. Если в последовательности имеются две или более записей с одинаковым значением полей упорядочивания, то для всех этих записей функция возвращает одинаковое значение.
КЛАССИФИКАЦИЯABC (CLASSIFICATIONABC)
Синтаксис:
КлассификацияABC(<Значение>, <КоличествоГрупп>, <ПроцентыДляГрупп>, <ИмяГруппировки>)
Описание:
Выполняет ABC-классификацию каждой записи в заданной группировке.
Параметры:
<Значение>
Тип: Строка. Указывает выражение, для которого следует рассчитывать классификацию.
<КоличествоГрупп>
Тип: Число. На сколько групп необходимо разбить набор значений.
<ПроцентыДляГрупп>
Тип: Строка. Объем, в %, каждой группы разбиения, кроме последней группы. Перечисляются в строке через запятую.
<ИмяГруппировки>
Тип: Строка. Имя группировки, в которой нужно вычислять функцию. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку или не указан, то значение вычисляется для группировки-строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
Возвращаемое значение:
Номер класса. 1 соответствует классу A, 2 – классу B, 3 – классу C и т. д.
Пример:
Копировать в буфер обменаКлассификацияABC(СуммаОборот, 3, "15, 25")
10.3.4.7. Другие операции
Операция ВЫБОР (CASE)
Описание:
Операция ВЫБОР предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий.
Пример:
Копировать в буфер обменаВЫБОР Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец
10.3.4.8. Правила сравнения двух значений
Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
● NULL (самый низший);
● Булево;
● Число;
● Дата;
● Строка;
● ссылочные типы.
Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.
Если типы данных совпадают, то производится сравнение значений по следующим правилам:
● у типа Булево значение Истина больше значения Ложь;
● у типа Число обычные правила сравнения для чисел;
● у типа Дата более ранние даты меньше более поздних;
● у типа Строка сравнения строк в соответствии с установленными национальными особенностями базы данных;
● ссылочные типы сравниваются на основе своих значений (номера записи и т. п.).
10.3.4.9. Работа со значением NULL
Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.
Есть исключения:
● операция И будет возвращать NULL только в случае, если ни один из операндов не имеет значение Ложь;
● операция ИЛИ будет возвращать NULL только в случае, если ни один из операндов не имеет значение Истина.
10.3.4.10. Приоритеты операций
Операции имеют следующие приоритеты (первая строка имеет низший приоритет):
● ИЛИ;
● И;
● НЕ;
● В, ЕСТЬ NULL, ЕСТЬ НЕ NULL;
● =, <>, <=, <, >=, >;
● Бинарный +, Бинарный -;
● *, /, %;
● Унарный +, Унарный -.
10.3.4.11. Функции
ВЫЧИСЛИТЬ (EVAL)
Синтаксис:
Вычислить(<Выражение>, <Группировка>, <ТипРасчета>)
Описание:
Функция ВЫЧИСЛИТЬ предназначена для вычисления выражения в контексте некоторой группировки.
Функция используется для совместимости с предыдущими версиями «1С:Предприятия». Вместо данной функции рекомендуется использовать функцию ВычислитьВыражение.
Параметры:
<Выражение>
Строка, содержащая вычисляемое выражение.
<Группировка>
Строка, содержащая имя группировки, в контексте которой необходимо вычислить выражение. Если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. Если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
<ТипРасчета>
Строка, содержащая тип расчета. Если данный параметр имеет значение ОбщийИтог, выражение будет вычисляться для всех записей группировки. Если значение параметра – Группировка, значения будут вычисляться для текущей групповой записи группировки.
Пример:
Копировать в буфер обменаСумма(Продажи.СуммаОборот) / ВЫЧИСЛИТЬ("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")
В данном примере в результате получится отношение суммы по полю Продажи.СуммаОборот записи группировки к сумме того же поля во всей компоновке.
ВЫЧИСЛИТЬВЫРАЖЕНИЕ (EVALEXPRESSION)
Синтаксис:
ВычислитьВыражение(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)
Описание:
Функция предназначена для вычисления выражения в контексте некоторой группировки. При указании интервала вычисление возможно только для агрегатных функций системы компоновки данных (см. здесь), для остальных функций вычисление не выполняется.
Функция учитывает отбор группировок, но не учитывает иерархические отборы. Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение("Сумма(СуммаОборот)", , "ОбщийИтог") > 1000. Но такое выражение можно использовать в иерархическом отборе. Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
При расчете интервальных выражений для общего итога (параметр Группировка имеет значение ОбщийИтог) считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
Если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, то компоновщик макета при генерации выражения функции ВычислитьВыражение заменяет функцию ВычислитьВыражение на NULL.
Параметры:
<Выражение>
Тип: Строка. Выражение, которое нужно вычислить.
<Группировка>
Тип: Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае, если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. Если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
Например:
Копировать в буфер обменаСумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")
В данном примере в результате получится отношение суммы по полю Продажи.СуммаОборот записи группировки к сумме того же поля во всей компоновке.
<ОбластьВычисления>
Тип: Строка. Параметр может принимать следующие значения:
● ОбщийИтог – выражение будет вычисляться для всех записей группировки.
● Иерархия – выражение будет вычисляться для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется.
● Группировка – выражение будет вычисляться для текущей групповой записи группировки.
● ГруппировкаНеРесурса – при вычислении функции для групповой записи по ресурсам выражение будет вычислено для первой групповой записи исходной группировки.
При вычислении функции ВычислитьВыражение() со значением ГруппировкаНеРесурса для групповых записей, не являющихся группировками по ресурсам, функция вычисляется, как в случае, если значение параметра было равно значению Группировка.
Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля-ресурса, по которому выполняется группировка, помещает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение(), с указанием параметра ГруппировкаНеРесурса. Для остальных ресурсов в группировке по ресурсу помещаются обычные выражения ресурсов.
<Начало>
Тип: Строка. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения, и из какой записи получать значения полей вне агрегатных функций. Значение может быть одним из следующих:
● Первая (First). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым числом больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
● Последняя (Last). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым числом больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
● Предыдущая (Previous). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки.
При получении предыдущей записи для итога по группировке считается, что получается первая запись.
● Следующая (Next). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая(), то считается, что записей нет.
При получении следующей записи для итога по группировке считается, что записи нет.
● Текущая (Current). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись.
● ОграничивающееЗначение (BoundaryValue). Необходимо получить запись по указанному значению. После слова ОграничивающееЗначение в скобках следует указать выражение первого поля упорядочивания, со значения которого нужно начинать фрагмент.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010 и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
<Конец>
Тип: Строка. Указывает, до какой записи нужно продолжать фрагмент, в котором рассчитывать агрегатные функции выражения. Значение может быть одним из следующих:
● Первая (First). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым числом больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
● Последняя (Last). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым числом больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
● Предыдущая (Previous). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3), то получается первая запись группировки.
При получении предыдущей записи для итога по группировке считается, что получается первая запись.
● Следующая (Next). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая(), то считается, что записей нет.
При получении следующей записи для итога по группировке считается, что записи нет.
● Текущая (Current). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись.
● ОграничивающееЗначение (BoundaryValue). Необходимо получить запись по указанному значению. После слова ОграничивающееЗначение в скобках следует указать выражение первого поля упорядочивания, со значения которого необходимо завершить фрагмент.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010 и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
<Сортировка>
Тип: Строка. Перечисляются выражения, разделенные запятыми, которые описывают правила упорядочивания. Если не указана, то упорядочивание выполняется так же, как и у группировки, для которой вычисляется выражение. После каждого выражения можно указать ключевое слово Возр (для упорядочивания по возрастанию), Убыв (для упорядочивания по убывания) и Автоупорядочивание (для упорядочивания ссылочных полей по полям, по которым нужно упорядочивать объект, на который выполняется ссылка). Слово Автоупорядочивание может использоваться как со словом Возр, так и со словом Убыв.
<ИерархическаяСортировка>
Тип: Строка. Аналогично параметру Сортировка. Применяется для упорядочивания иерархических записей. Если не указано, компоновщик макета генерирует упорядочивание в соответствии с упорядочиванием, указанным в параметре Сортировка.
<ОбработкаОдинаковыхЗначенийПорядка>
Тип: Строка. Указывает правило определения предыдущей или следующий записи, если есть несколько записей с одинаковым значением упорядочивания:
● Отдельно (Separately) обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей. Значение по умолчанию.
● Вместе (Together) обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания.
Например, если полученная последовательность упорядочена по дате:
|
№ |
Дата |
ФИО |
Значение |
|
1 |
01 января 2001 года |
Иванов М. |
10 |
|
2 |
02 января 2001 года |
Петров С. |
20 |
|
3 |
02 января 2001 года |
Сидоров Р. |
30 |
|
4 |
03 января 2001 года |
Петров С. |
40 |
Если значение параметра равно Отдельно, то:
● Предыдущей записью к записи 3 будет запись 2.
● Если расчетный фрагмент определяется как Текущая, Текущая (соответственно, параметры Начало и Конец), то для записи 2 этот фрагмент будет состоять из одной записи 2. Выражение ВычислитьВыражение("Сумма(Значение)", , , Текущая, Текущая) будет равно 20.
Если значение параметра равно Вместе, то:
● Предыдущей записью к записи 3 будет запись 1.
● Если расчетный фрагмент определяется как Текущая, Текущая (соответственно, параметры Начало и Конец), то для записи 2 этот фрагмент будет состоять из записей 2 и 3. Выражение ВычислитьВыражение("Сумма(Значение)", , , Текущая, Текущая) будет равно 50.
При указании значения параметра, равного Вместе, в параметрах Начало и Конец нельзя указывать смещение для позиций Первая, Последняя, Предыдущая, Следующая.
Пример:
Если требуется рассчитать сумму с накоплением, то можно использовать следующее выражение:
Копировать в буфер обменаВычислитьВыражение("Сумма(СуммаОборот)", , , "Первая", "Текущая")
Если требуется получить значение группировки в предыдущей строке, то можно использовать следующее выражение:
Копировать в буфер обменаВычислитьВыражение("Курс", , , "Предыдущая")
ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ (EVALEXPRESSIONWITHGROUPARRAY)
Синтаксис:
ВычислитьВыражениеСГруппировкойМассив(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>)
Описание:
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет преобразовано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкойМассив(), генерирует выводимое выражение таким образом, чтобы выводимая информация была упорядочена. Например, для пользовательского поля с выражением:
Копировать в буфер обменаВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:
Копировать в буфер обменаСоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Представление(Сумма(НаборДанных.СуммаОборот)),Сумма(НаборДанных.СуммаОборот)","НаборДанных.Контрагент"),"2")))
Параметры:
<Выражение>
Тип: Строка. Выражение, которое нужно вычислить. Строка, например, Сумма(СуммаОборот).
<ВыражениеПолейГруппировки>
Тип: Строка. Выражения полей группировки – выражения полей группировки, перечисленные через запятую. Например, Контрагент, Партия.
<ОтборЗаписей>
Тип: Строка. Выражение, описывающее отбор, применяемый к детальным записям. В выражении не поддерживается использование агрегатных функций. Например, ПометкаУдаления = Ложь.
<ОтборГруппировок>
Тип: Строка. Выражение, описывающее отбор, применяемый к групповым записям. Например, Сумма(СуммаОборот) > &Параметр1.
Пример:
Копировать в буфер обменаМаксимум(ВычислитьВыражениеСГруппировкойМассив ("Сумма(СуммаОборот)", "Контрагент"));
ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙТАБЛИЦАЗНАЧЕНИЙ (EVALEXPRESSIONWITHGROUPVALUETABLE)
Синтаксис:
ВычислитьВыражениеСГруппировкойТаблицаЗначений(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>)
Описание:
Функция возвращает таблицу значений, каждая строка которой содержит результат вычисления выражений для группировки по указанному полю.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкойТаблицаЗначений(), генерирует выводимое выражение таким образом, чтобы выводимая информация была упорядочена. Например, для пользовательского поля с выражением:
Копировать в буфер обменаВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент, Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:
Копировать в буфер обменаСоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание", "НаборДанных.Контрагент"), "5, 1, 3"), "2, 4"))
Параметры:
<Выражения>
Тип: Строка. Выражения, которые нужно вычислить. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж.
<ВыражениеПолейГруппировки>
Тип: Строка. Выражения полей группировки – выражения полей группировки, перечисленные через запятую. Например, Контрагент, Партия.
<ОтборЗаписей>
Тип: Строка. Выражение, описывающее отбор, применяемый к детальным записям. В выражении не поддерживается использование агрегатных функций. Например, ПометкаУдаления = Ложь.
<ОтборГруппировок>
Тип: Строка. Выражение, описывающее отбор, применяемый к групповым записям. Например, Сумма(СуммаОборот) > &Параметр1.
Пример:
Копировать в буфер обменаВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж", "Контрагент")
Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
УРОВЕНЬ (LEVEL)
Описание:
Функция предназначена для получения текущего уровня записи.
Пример:
Копировать в буфер обменаУРОВЕНЬ()
УРОВЕНЬВГРУППИРОВКЕ (LEVELINGROUP)
Описание:
Функция предназначена для получения уровня записи относительно корня группировки.
Пример:
Копировать в буфер обменаУРОВЕНЬВГРУППИРОВКЕ()
ЗНАЧЕНИЕЗАПОЛНЕНО (VALUEISFILLED)
Описание:
Возвращает Истина, если значение отлично от значения данного типа по умолчанию, отлично от значения NULL, отлично от пустой ссылки, отлично от значения Неопределено. Для логических значений осуществляется проверка на значение NULL. Для строк осуществляется проверка на отсутствие непробельных символов.
НОМЕРПОПОРЯДКУ (SERIALNUMBER)
Описание:
Получить следующий порядковый номер.
Пример:
Копировать в буфер обменаНОМЕРПОПОРЯДКУ()
НОМЕРПОПОРЯДКУВГРУППИРОВКЕ (GROUPSERIALNUMBER)
Описание:
Возвращает следующий порядковый номер в текущей группировке.
Пример:
Копировать в буфер обменаНОМЕРПОПОРЯДКУВГРУППИРОВКЕ()
ФОРМАТ (FORMAT)
Описание:
Получить отформатированную строку переданного значения. Форматная строка задается в соответствии с форматной строкой системы «1С:Предприятие».
Параметры:
● Значение,
● Форматная строка.
Пример:
Копировать в буфер обменаФОРМАТ(РасходныеНакладные.СуммаДок, "ЧДЦ=2")
НАЧАЛОПЕРИОДА (BEGINOFPERIOD)
Описание:
Функция предназначена для выделения определенной даты из заданной даты.
Параметры:
● Выражение типа Дата.
● Тип периода – строка, содержащая одно из значений: Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие. Если тип периода указан Неделя, то учитывается значение свойства Первый день недели региональных установок информационной базы (подробнее см. здесь).
Пример:
Копировать в буфер обменаНАЧАЛОПЕРИОДА(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")
Результат:
Копировать в буфер обмена01.10.2002 0:00:00
КОНЕЦПЕРИОДА (ENDOFPERIOD)
Описание:
Функция предназначена для выделения определенной даты из заданной даты.
Параметры:
● Выражение типа Дата.
● Тип периода – строка, содержащая одно из значений: Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие. Если тип периода указан Неделя, то учитывается значение свойства Первый день недели региональных установок информационной базы (подробнее см. здесь).
Пример:
Копировать в буфер обменаКОНЕЦПЕРИОДА(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя")
Результат:
Копировать в буфер обмена13.10.2002 23:59:59
ДОБАВИТЬКДАТЕ (DATEADD)
Описание:
Функция предназначена для прибавления к дате некоторой величины.
Параметры:
● Выражение типа Дата.
● Тип увеличения – строка, содержащая одно из значений: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие.
● Величина – на сколько необходимо увеличить дату. Тип Число. Дробная часть игнорируется.
Пример:
Копировать в буфер обменаДОБАВИТЬКДАТЕ(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)
Результат:
Копировать в буфер обмена12.11.2002 10:15:34
РАЗНОСТЬДАТ (DATEDIFF)
Описание:
Функция предназначена для получения разницы между двумя датами.
Параметры:
● Выражение типа Дата.
● Выражение типа Дата.
● Тип разности – одно из значений: Секунда, Минута, Час, День, Месяц, Квартал, Год.
Пример:
Копировать в буфер обменаРАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ")
Результат:
Копировать в буфер обмена2
ТЕКУЩАЯДАТА (CURRENTDATE)
Описание:
Возвращает системную дату. При компоновке макета компоновки во всех выражениях, которые присутствуют в компоновке, функция ТекущаяДата() заменяется значением текущей даты.
Пример:
Копировать в буфер обменаТЕКУЩАЯДАТА()
ПОДСТРОКА (SUBSTRING)
Описание:
Данная функция предназначена для выделения подстроки из строки.
Параметры:
● выражение, имеющее строковый тип;
● позиция символа, с которого начинается выделяемая из строки подстрока;
● длина выделяемой подстроки.
Пример:
Копировать в буфер обменаПОДСТРОКА(Контрагенты.Адрес, 1, 4)
ДЛИНАСТРОКИ (STRINGLENGTH)
Описание:
Функция предназначена для определения длины строки. Параметр – выражение строкового типа.
Пример:
Копировать в буфер обменаДЛИНАСТРОКИ(Контрагенты.Адрес)
ГОД (YEAR)
Описание:
Данная функция предназначена для выделения года из значения типа Дата. Единственный параметр – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаГОД(РасхНакл.Дата)
КВАРТАЛ (QUARTER)
Описание:
Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаКВАРТАЛ(РасхНакл.Дата)
МЕСЯЦ (MONTH)
Описание:
Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапазоне от 1 до 12. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаМЕСЯЦ(РасхНакл.Дата)
ДЕНЬГОДА (DAYOFYEAR)
Описание:
Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365 (366). Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаДЕНЬГОДА(РасхНакл.Дата)
ДЕНЬ (DAY)
Описание:
Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаДЕНЬ(РасхНакл.Дата)
НЕДЕЛЯ (WEEK)
Описание:
Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1. Единственный параметр функции – это выражение, имеющее тип Дата. При вычислении учитывается значение свойства Первый день недели региональных установок информационной базы (подробнее см. здесь).
Пример:
Копировать в буфер обменаНЕДЕЛЯ(РасхНакл.Дата)
ДЕНЬНЕДЕЛИ (WEEKDAY)
Описание:
Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7 (воскресенье). Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаДЕНЬНЕДЕЛИ(РасхНакл.Дата)
ЧАС (HOUR)
Описание:
Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаЧАС(РасхНакл.Дата)
МИНУТА (MINUTE)
Описание:
Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаМИНУТА(РасхНакл.Дата)
СЕКУНДА (SECOND)
Описание:
Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59. Единственный параметр функции – это выражение, имеющее тип Дата.
Пример:
Копировать в буфер обменаСЕКУНДА(РасхНакл.Дата)
ВЫРАЗИТЬ (CAST)
Описание:
Данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. Если выражение будет содержать тип, отличный от требуемого, будет возвращено значение NULL.
Параметры:
● Преобразуемое выражение.
● Тип – строка, содержащая строку типа. Например, Число, Строка и т. п. Кроме примитивных типов данная строка может содержать имя таблицы. В таком случае будет осуществлена попытка выразить к ссылке на указанную таблицу.
Пример:
Копировать в буфер обменаВЫРАЗИТЬ(Данные.Реквизит1, "Число(10,3)")
ЕСТЬNULL (ISNULL)
Описание:
Данная функция возвращает значение второго параметра, если значение первого параметра NULL. В противном случае будет возвращено значение первого параметра.
Пример:
Копировать в буфер обменаЕСТЬNULL(Сумма(Продажи.СуммаОборот), 0)
ПРЕДСТАВЛЕНИЕ (PRESENTATION)
Синтаксис:
Представление(<Выражение>)
Описание:
Данная функция возвращает строковое представление переданного значения непримитивного типа. Для значений примитивного типа возвращает само значение.
Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки – символом перевода строки. Если у какого-либо элемента строковое представление пустое, то вместо его представления выводится строка <Пустое значение>.
Пример:
Копировать в буфер обменаПредставление(Контрагент)
СТРОКА (STRING)
Синтаксис:
Строка(<Выражение>)
Описание:
Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки – символом перевода строки. Если у какого-либо элемента строковое представление пустое, то вместо его представления выводится строка <Пустое значение>.
Пример:
Копировать в буфер обменаСтрока(ДатаПродажи)
ACOS
Синтаксис:
ACos(<X>)
Описание:
Вычисляет значение арккосинуса.
ASIN
Синтаксис:
ASin(<X>)
Описание:
Вычисляет значение арксинуса.
ATAN
Синтаксис:
ATan(<X>)
Описание:
Вычисляет значение арктангенса.
COS
Синтаксис:
Cos(<X>)
Описание:
Вычисляет значение косинуса.
SIN
Синтаксис:
Sin(<X>)
Описание:
Вычисляет значение синуса.
TAN
Синтаксис:
Tan(<X>)
Описание:
Вычисляет значение тангенса.
EXP
Синтаксис:
Exp(<X>)
Описание:
Вычисляет e в степени X.
LOG
Синтаксис:
Log(<X>)
Описание:
Вычисляет значение натурального логарифма.
LOG10
Синтаксис:
Log10(<X>)
Описание:
Вычисляет значение десятичного логарифма.
POW
Синтаксис:
Pow(<X>, <Y>)
Описание:
Вычисляет значение X в степени Y.
SQRT
Синтаксис:
Sqrt(<X>)
Описание:
Вычисляет значение квадратного корня.
ОКР (ROUND)
Синтаксис:
Окр(<Выражение>, <КоличествоЗнаков>)
Описание:
Округляет значение Выражение до КоличествоЗнаков после запятой.
ЦЕЛ (INT)
Синтаксис:
Цел(<Выражение>)
Описание:
Вычисляет целую часть переданного числа, полностью отсекая дробную часть.
ТИПЗНАЧЕНИЯ (VALUETYPE)
Синтаксис:
ТипЗначения(<Выражение>)
Описание:
Вычисляет тип выражения, переданного в качестве параметра.
Возвращаемое значение:
Значение типа Тип.
10.3.4.12. Функции общих модулей
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации и неглобальных общих модулей с установленным свойством Клиент (обычное приложение) (при использовании обычного приложения) или Сервер (при использовании управляемого приложения). Никакого дополнительного синтаксиса для вызова таких функций не требуется.
Копировать в буфер обменаСокращенноеНаименование(Докум.Ссылка, Докум.Дата, Докум.Номер)
В данном примере будет осуществлен вызов функции СокращенноеНаименование() из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.
10.3.5. Конструктор схемы компоновки данных
Конструктор схемы компоновки данных представляет собой объект встроенного языка КонструкторСхемыКомпоновкиДанных, предназначенный для визуального конструирования схемы компоновки данных. Кроме того, конструктор схемы компоновки данных используется в конфигураторе при редактировании схемы компоновки данных.
Для наборов данных – запроса конструктор автоматически получает вложенные наборы данных из текста запроса и оформляет их как поля набора данных – вложенный набор данных.
Для наборов данных – объекта конструктор позволяет добавлять поля – вложенные наборы данных.

Рис. 356. Добавление нового набора данных
Ниже приведен пример открытия окна конструктора схемы компоновки данных и последующей сериализации полученной схемы компоновки в XML.
Копировать в буфер обменаПроцедура КоманднаяПанельРедактораОтчета (Кнопка) Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных()); Конструктор.Редактировать(ЭтотОбъект); КонецПроцедуры Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) Если ТипЗнч(Источник) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда СхемаКомпоновкиДанных = Источник.ПолучитьСхему(); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных, "dataCompositionScheme", "http://v8.1c.ru/8/data-composition-system/scheme"); ЭлементыФормы.ТекстСхемыКомпоновкиДанных. УстановитьТекст(ЗаписьXML.Закрыть()); КонецЕсли; КонецПроцедуры
Работа со схемой компоновки данных подразделяется на следующие этапы:
● редактирование наборов данных,
● редактирование полей наборов данных,
● редактирование связей наборов данных,
● редактирование вычисляемых полей,
● редактирование ресурсов,
● редактирование параметров,
● редактирование макетов,
● редактирование вложенных настроек,
● редактирование настроек системы компоновки данных.
10.3.5.1. Редактирование наборов данных
Система компоновки данных поддерживает редактирование следующих объектов:
● набор данных – запрос;
● набор данных – объект;
● набор данных – объединение;
● полей запроса.
При добавлении набора данных ему автоматически генерируется имя и источник данных (если источника данных не существует).
Поле набора данных схемы компоновки данных – вложенный набор данных может быть описано в запросе и описано в наборе данных – объекте.
В тексте запроса набора данных – объекта в предложениях {ВЫБРАТЬ} и {ГДЕ} можно использовать вложенные таблицы.
Копировать в буфер обменаВЫБРАТЬ ПриходТовара.Дата, ПриходТовара.Номер, ПриходТовара.Поставщик, ПриходТовара.Склад, ПриходТовара.Товары.( НомерСтроки, Товар, Цена, Количество, Сумма ) {ВЫБРАТЬ Дата, Номер, Поставщик.*, Склад.*, Товары.( НомерСтроки, Товар.*, Цена, Количество, Сумма )} ИЗ Документ.ПриходТовара КАК ПриходТовара {ГДЕ ПриходТовара.Дата, ПриходТовара.Номер, ПриходТовара.Поставщик.*, ПриходТовара.Склад.*, ПриходТовара.Товары.( НомерСтроки, Товар.*, Цена, Количество, Сумма )}
В приведенном примере жирным выделены фрагменты запроса, описывающие поля вложенных таблиц, доступные для настроек.
10.3.5.1.1. Редактирование набора данных – запроса
Редактирование набора данных – запроса заключается в составлении запроса к данным. Для этого можно воспользоваться конструктором запроса или редактировать текст запроса непосредственно в окне конструктора схемы компоновки данных.

Рис. 357. Набор данных – запрос
Если флажок Автозаполнение установлен, то система компоновки данных автоматически заполняет поля схемы компоновки данных на основании созданного запроса.
10.3.5.1.2. Редактирование набора данных – объекта
Редактирование набора данных – объекта заключается в добавлении/редактировании имени объекта, содержащего данные; в добавлении/редактировании полей и группировок.

Рис. 358. Набор данных – объект
10.3.5.1.3. Редактирование набора данных – объединения
Редактирование набора данных – объединения заключается в редактировании объединенных полей из состава полей, подчиненных данному набору данных. Созданные наборы данных – запросы и объекты можно добавлять в набор данных – объединение, перемещая их мышкой.

Рис. 359. Набор данных – объединение
10.3.5.2. Редактирование полей набора данных
При редактировании полей существует возможность задать:
● заголовок поля;
● ограничение доступности поля;
● ограничение доступности полей-реквизитов;
● роль для поля;
● представление поля;
● выражения упорядочивания;
● способ проверки иерархии (набор данных и параметр);
● тип значения поля;
● оформление поля.
Следует заметить, что роль поля, представление, выражение упорядочивания, параметр, тип значения и оформление поля редактируются только на верхнем уровне иерархии наборов данных.
Если у поля набора данных не установлен заголовок, система компоновки данных пытается сформировать заголовок поля на основе синонима поля запроса. Если синоним для поля не получен, то в качестве заголовка поля используется путь к данным поля, дополненный пробелами при помощи алгоритма преобразования имен в синонимы. Синонимы для полей запроса получаются только для тех полей, у которых либо не установлен псевдоним, либо псевдоним не отличается от псевдонима, которой был бы у данного поля по умолчанию.
Синонимы для поля запроса получаются следующим образом.
● Если запрос не содержит объединений:
● Если выражение поля запроса состоит из одного поля, то синоним получается из этого поля.
● Если выражение поля является агрегатной функцией над одним полем, то синоним поля получается из этого поля. Для других выражений считается, что синоним получить невозможно.
● Если запрос содержит объединения:
● Во всех объединениях ищется поле, для которого можно получить синоним, использующийся в качестве синонима поля. Если такого поля не найдено, то считается, что синоним получить невозможно.
В конструкторе схемы компоновки данных существует дополнительная колонка с флажком, указывающим, что заголовок поля установлен вручную. Флажок автоматически снимается, если у поля не установлен заголовок.
При заполнении полей на основании запроса конструктор автоматически заполняет заголовки для тех полей, у которых невозможно получение синонима, и для тех полей, у которых в запросе псевдоним отличается от псевдонима данного поля по умолчанию. Таким образом, для таких полей флажок будет автоматически установлен.
Если данный флажок снят, в колонке Заголовок отображается заголовок, который будет выводиться пользователю. При этом сам заголовок в поле не заполнен. Колонка Заголовок для полей, у которых снят флажок, не редактируется и отображается недоступным цветом текста.
Если разработчику требуется изменить заголовок, он устанавливает флажок, при этом текст заголовка поля заполняется на основании текста, который ранее отображался в колонке Заголовок. Если флажок снят, конструктор очищает текст заголовка и начинает отображать в заголовке автоматически генерируемый заголовок.
Роль поля изначально определяется в запросе, но есть возможность ее изменения в отдельном диалоге.

Рис. 360. Роль поля
Для поля счета в параметре Вид необходимо явно указать ссылку на вид счета.
Для поля измерения в параметре Измерение можно указать путь к данным родительского измерения.
Установленный признак Игнорировать значения NULL означает, что в результат не будут включены групповые записи по данному полю, если оно содержит значение NULL.
В результирующем наборе данных поля с установленным флажком Обязательное будут присутствовать всегда, если в настройках задействовано хотя бы одно поле из его набора данных. Например, необходимо получать развернутые остатки по субконто. При этом если поле Субконто не будет использоваться в запросе, остатки будут получаться свернутыми.
Выражения упорядочивания поля, тип значения и оформление также могут быть отредактированы в отдельном диалоге.
10.3.5.3. Редактирование связей наборов данных
При наличии нескольких наборов данных верхнего уровня существует возможность настроить связь между ними по одному или нескольким полям.

Рис. 361. Связи наборов данных
Источником и приемником связи являются наборы данных. Выражениями источника и приемника – поля наборов данных.
10.3.5.4. Редактирование вычисляемых полей
Закладка Вычисляемые поля позволяет создавать и редактировать следующие свойства/характеристики вычисляемых полей:
● путь к данным;
● выражение;
● заголовок;
● ограничение доступности;
● выражение представления;
● выражения упорядочивания;
● тип значения;
● оформление;
● доступные значения.
Выражения упорядочивания редактируются в отдельном диалоге.
10.3.5.5. Редактирование ресурсов
Вычисление ресурсов возможно по всем полям всех наборов данных и по вычисляемым полям. В левом табличном поле отображается список доступных и неиспользованных полей. В правом табличном поле отображаются поля, по которым будут формироваться итоги и выражения их вычисления.

Рис. 362. Редактирование ресурсов
По умолчанию для числовых полей устанавливается функция Сумма, для нечисловых полей – Количество. Нажатием кнопки ">>" можно добавить в ресурсы все поля типа Число. При этом допускается ввод нескольких строк для одного ресурса. Компоновщик макета, получая выражение для ресурса, использует информацию о том, для какой группировки оно получается, и выдает соответствующее выражение.
В диалоге редактирования колонки Рассчитывать по… для полей, по которым возможна иерархическая группировка, добавляются строки с именем поля и ключевым словом Иерархия. Выражение будет использоваться для иерархических записей группировки по полю, указанному перед словом. При выборе группировки, в разрезе которой может рассчитываться ресурс, можно одновременно выбирать и обычное, и иерархическое поле.

Рис. 363. Расчет ресурсов по полям группировки
Если для ресурса было указано, что его можно рассчитывать только в разрезе некоторой группировки (то есть в колонке Рассчитывать по… было выбрано хотя бы одно поле группировки), то данный ресурс будет выводиться в результат только для этой группировки и группировок, вложенных в нее.
10.3.5.6. Редактирование параметров
Редактирование параметров включает в себя:
● редактирование имени параметра;
● редактирование заголовка;
● редактирование доступных типов и значений параметра;
● определение значения и доступности списка значений параметра;
● определение выражения;
● определение параметра в качестве доступного поля настройки компоновки данных;
● ограничение доступности;
● определение обязательности заполнения параметра;
● признак использования параметра;
● задание параметров редактирования.

Рис. 364. Редактирование параметров
При неопределенном значении параметра считается, что значение – нулевая ссылка на заданный тип. В параметрах могут использоваться предопределенные данные и перечисления (режим Конфигуратор).
В колонке Доступные значения редактируются значения, которые могут быть выбраны пользователем в качестве параметров схемы компоновки данных. Если флажок в колонке Доступен список значений установлен, то это означает, что можно будет использовать несколько значений параметра.
Примечание. При использовании типа параметра СтандартныйПериод следует учитывать, что даты начала и конца стандартного периода также содержат и время. Причем начальная дата имеет время 00:00:00, а конечная дата 23:59:59. Таким образом, в запросе не обязательно использовать функции НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА.
Приведем пример использования обязательного параметра схемы компоновки данных: допустим, в отчете требуется обязательно указывать параметр Организация. В схеме компоновки данных для параметра Организация свойство Использование устанавливается в значение Всегда, а свойство Запрещать незаполненные значения – в значение Истина.
Во время работы с отчетом пользователю недоступно свойство Использование (он отсутствует), а незаполненное значение отображается обычным способом (волнистая красная черта). Если пользователь не заполнит значение параметра и запустит отчет на исполнение, он получит сообщение о том, что нужно ввести значение параметра.
10.3.5.7. Редактирование макетов
Добавление макетов осуществляется нажатием кнопки Добавить макет на командной панели.

Рис. 365. Редактор макета
Предлагается выбрать один из вариантов макетов:
● макет поля,
● макет группировки,
● макет заголовка группировки,
● макет ресурсов таблицы.
Для макета группировки и заголовка группировки можно задать имя группировки или поля группировки, тип макета.
Для макета ресурса таблицы можно задать макеты для двух группировок, на пересечении которых он находится.
Колонка табличного поля Область указывает координаты области макета в табличном документе.
Редактирование областей табличного документа возможно с помощью панели свойств, вызываемой Alt + Enter. Редактируется как внешний вид, так и содержимое ячейки и параметр расшифровки для нее.
Макет может редактироваться на всех языках, поддерживаемых системой. При задании параметра или шаблона ячейке табличного документа параметры добавляются в макет и отображаются в колонке Имя параметра табличного поля Параметры макета. Возможно редактирование выражения параметра макета. При загрузке области макета разделяются пустыми строками.
10.3.5.8. Вложенные схемы
Закладка Вложенные схемы позволяет создавать и редактировать вложенные схемы компоновки данных. В роли схемы могут выступать вложенные схемы, редактируемые конструктором схемы компоновки данных.

Рис. 366. Вложенные схемы
10.3.5.9. Настройки
Схема компоновки данных содержит настройки компоновки данных по умолчанию, которые могут быть заданы разработчиком.
Рис. 367. Редактор настроек схемы компоновки данных
Настройка отчета Авто позиция ресурсов управляет тем, как будут выводиться поля ресурсов:
● Не использовать – в этом случае ресурсы выводятся в том порядке, в котором перечислены поля на закладке Выбранные поля.
● После всех полей – в этом случае ресурсы выводятся после всех полей.
Для группировки (или группировки таблицы) существует параметр Вариант использования группировки, который управляет выводом дополнительной информации после полей ресурсов. Если данный параметр не установлен либо имеет значение Авто, то группировка отвечает за вывод детальных записей.
Если параметр имеет значение Дополнительная информация и указан у группировки-колонки, то в результирующую таблицу в этой колонке будет выдана одна колонка, в ней будут выводиться поля, указанные на закладке Выбранные полях данной группировки и доступные для вывода в группировке-строке. Если при этом у группировки-колонки указаны поля группировки, то при компоновке макета будет выдана ошибка. Для группировки-строки – аналогично, только выводится одна строка, а не колонка.
Например, в таблицу в строках выдается Номенклатура. В колонках таблицы выдаются склады. Формируется отчет об остатках товаров на складах. Необходимо выводить артикул номенклатуры после колонок с остатками. Для этого следует добавить в колонки таблицы группировку без групповых полей и в настройках группировки указать параметр Вариант использования группировки в значение Дополнительная информация. На закладке Выбранные поля следует указать поле Номенклатура.Артикул.
При выводе такой группировки вне таблицы в группировке выдаются все поля, которые доступны в данной группировке.
Например, если в отчете имеется группировка, в которую вложено несколько группировок. При помощи группировки с параметром Вариант использования группировки, установленным в значение Дополнительная информация, можно вывести между группировками данные родительской группировки.
Для группировок с вариантом использования Дополнительная информация игнорируются следующие параметры:
● Расположение полей группировки – заголовки полей, выводимых в группировки, всегда выдаются в начале строки/колонки.
● Количество записей.
● Процент записей.
● Расположение итогов.
● Расположение полей группировок.
● Расположение группировок.
● Расположение общих итогов.
При выполнении компоновки макета, если в группировке с вариантом использования Дополнительная информация используется поле, которое недоступно в группировке или в таблице, недоступно ни в одной группировке, выдается исключение.
10.3.5.9.1. Вложенные поля
Для числовых полей
Для числовых ресурсов система автоматически формирует вложенные поля. Эти поля автоматически рассчитываются системой и позволяют упростить получение различных показателей, например, для получения процентного отношения значения ресурса к сумме значений ресурса во всех данных отчета. Перечислим эти поля.
% в группе иерархии
Идентификатор:
ПроцентВИерархии
PercentInHierarchy
Описание:
Данное поле содержит процент значения ресурса в текущей иерархической группе. При выводе вне таблицы равно 100 %.
% в группе иерархии колонки или точки
Идентификатор:
ПроцентВИерархииВКолонкеИлиТочке
PercentInColumnOrPointHierarchy
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса на текущем уровне иерархии текущей группировки по колонке или точке (в процентах). При выводе вне таблицы равно полю % в группе иерархии.
% в группе иерархии строки или серии
Идентификатор:
ПроцентВИерархииВСтрокеИлиСерии
PercentInRowOrSeriesHierarchy
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса на текущем уровне иерархии текущей группировки по строке или серии (в процентах). При выводе вне таблицы равно 100 %.
% в группировке
Идентификатор:
ПроцентВГруппе
GroupPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса в текущей группировке. При выводе вне таблицы содержит 100 %.
% в группировке колонки или точки
Идентификатор:
ПроцентВГруппеВКолонкеИлиТочке
ColumnOrPointGroupPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса в текущей группировке по колонке или точке (в процентах). При выводе вне таблицы содержит 100 %.
% в группировке строки или серии
Идентификатор:
ПроцентВГруппеВСтрокеИлиСерии
RowOrSeriesGroupPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса в текущей группировке по строке или серии (в процентах). При выводе вне таблицы содержит поле % в группировке.
% в колонке или точке
Идентификатор:
ПроцентВКолонкеИлиТочке
ColumnOrPointPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса по колонке или точке (в процентах). При выводе вне таблицы содержит поле % общий.
% в строке или серии
Идентификатор:
ПроцентВСтрокеИлиСерии
RowOrSeriesPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению итога ресурса по строке или серии (в процентах). При выводе вне таблицы содержит 100 %.
% общий
Идентификатор:
ПроцентОбщий
OverallPercent
Описание:
Данное поле содержит отношение значения ресурса в текущей ячейке к значению общего итога ресурса в таблице (в процентах). При выводе вне таблицы содержит 100%.
Для полей, содержащих в составе своих типов тип Дата
Для полей, содержащих в составе своих типов тип Дата, система автоматически формирует вложенные поля. Эти поля автоматически рассчитываются системой и позволяют упростить отображение различной информации, связанной с датой и временем. Для удобства работы, эти поля сгруппированы в три группы: Даты начала (ДатыНачала, BeginDates), Даты конца (ДатыКонца, EndDates), Части дат (ЧастиДат, DateParts). Перечислим эти поля.
Группа «Даты начала»
Начало дня
Идентификатор:
НачалоДня
BegOfDay
Описание:
Возвращает дату и время начала дня.
Начало недели
Идентификатор:
НачалоНедели
BegOfWeek
Описание:
Возвращает дату и время начала недели, с учетом свойства Первый день недели региональных установок информационной базы (подробнее см. здесь).
Начало декады
Идентификатор:
НачалоДекады
BegOfTenDays
Описание:
Возвращает дату и время начала декады.
Начало месяца
Идентификатор:
НачалоМесяца
BegOfMonth
Описание:
Возвращает дату и время начала месяца.
Начало квартала
Идентификатор:
НачалоКвартала
BegOfQuarter
Описание:
Возвращает дату и время начала квартала.
Начало полугодия
Идентификатор:
НачалоПолугодия
BegOfHalfYear
Описание:
Возвращает дату и время начала полугодия.
Начало года
Идентификатор:
НачалоГода
BegOfYear
Описание:
Возвращает дату и время начала полугодия.
Начало минуты
Идентификатор:
НачалоМинуты
BegOfMinute
Описание:
Возвращает дату и время начала минуты (если в составе даты есть время).
Начало часа
Идентификатор:
НачалоЧаса
BegOfHour
Описание:
Возвращает дату и время начала часа (если в составе даты есть время).
Группа «Даты конца»
Конец дня
Идентификатор:
КонецДня
EndOfDay
Описание:
Возвращает дату и время конца дня.
Конец недели
Идентификатор:
КонецНедели
EndOfWeek
Описание:
Возвращает дату и время конца недели, с учетом свойства Первый день недели региональных установок информационной базы (подробнее см. здесь)
Конец декады
Идентификатор:
КонецДекады
EndOfTenDays
Описание:
Возвращает дату и время конца декады.
Конец месяца
Идентификатор:
КонецМесяца
EndOfMonth
Описание:
Возвращает дату и время конца месяца.
Конец квартала
Идентификатор:
КонецКвартала
EndOfQuarter
Описание:
Возвращает дату и время конца квартала.
Конец полугодия
Идентификатор:
КонецПолугодия
EndOfHalfYear
Описание:
Возвращает дату и время конца полугодия.
Конец года
Идентификатор:
КонецГода
EndOfYear
Описание:
Возвращает дату и время конца года.
Конец минуты
Идентификатор:
КонецМинуты
EndOfMinute
Описание:
Возвращает дату и время конца минуты (если в составе даты есть время).
Конец часа
Идентификатор:
КонецЧаса
EndOfHour
Описание:
Возвращает дату и время конца часа (если в составе даты есть время).
Группа «Части дат»
День
Идентификатор:
День
Day
Описание:
День месяца (число).
День недели
Идентификатор:
ДеньНедели
WeekDay
Описание:
Номер дня недели (как возвращает функция ДеньНедели(), неделя всегда начинается с понедельника).
Название дня недели
Идентификатор:
НазваниеДняНедели
WeekDayName
Описание:
Представление дня недели (1 – понедельник, 2 – вторник и т. д.). Номер дня получается функцией ДеньНедели().
День года
Идентификатор:
ДеньГода
DayOfYear
Описание:
Номер для дня года (число).
Неделя года
Идентификатор:
НеделяГода
WeekOfYear
Описание:
Номер недели в году (число), с учетом свойства Первый день недели региональных установок информационной базы (подробнее см. здесь)
Месяц
Идентификатор:
Месяц
Month
Описание:
Номер месяца года (число).
Название месяца
Идентификатор:
НазваниеМесяца
MonthName
Описание:
Представление названия месяца (1 – январь, 2 – февраль и т. д.).
Квартал
Идентификатор:
Квартал
Quarter
Описание:
Номер квартала.
Год
Идентификатор:
Год
Year
Описание:
Значение года в 4-разрядном виде (число).
Минута
Идентификатор:
Минута
Minute
Описание:
Номер минуты.
Час
Идентификатор:
Час
Hour
Описание:
Номер часа.
10.3.5.9.2. Системные поля
В списке выбранных полей система формирует специальную группу системных полей (СистемныеПоля, SystemFileds), которые предназначены для определения порядкового номера записи, как во всем отчете, так и в рамках группировок. Следует помнить, что системные поля не попадают в список полей, получающихся при развороте автополя, поэтому их необходимо добавлять вручную.
№ п/п
Идентификатор:
СистемныеПоля.НомерПоПорядку
SystemFields.SerialNumber
Описание:
Содержит порядковый номер строки в данном отчете. Начинается с 1.
№ в группе
Идентификатор:
СистемныеПоля.НомерПоПорядкуВГруппировке
SystemFields.GroupSerialNumber
Описание:
Содержит порядковый номер строки в текущей группировке. Начинается с 1.
Уровень
Идентификатор:
СистемныеПоля.Уровень
SystemFields.Level
Описание:
Содержит текущий уровень записи. Начинается с 1.
Уровень в группе
Идентификатор:
СистемныеПоля.УровеньВГруппировке
SystemFields.LevelInGroup
Описание:
Содержит текущий уровень записи относительно группировки. Начинается с 1.
10.3.5.9.3. Поля параметров
В выбранных полях присутствует специальная группа Параметры, которая предоставляет возможность поместить в отчет параметры схемы компоновки данных, у которых установлен флажок Включать в доступные поля.
10.3.6. Настройки варианта компоновки данных
В схеме компоновки данных имеется возможность определения нескольких вариантов настроек. Вариант настройки – это набор настроек отчета, которые разработчик посчитал нужным выделить отдельно. Такие варианты настроек хранятся в схеме компоновки данных.
Например, для отчета Динамика продаж одним вариантом отчета может служить диаграмма, показывающая продажи товаров по периодам, а другим – табличный отчет, показывающий продажи товаров в разрезе покупателей. При этом каждый вариант отчета обладает своим набором пользовательских настроек.
При использовании схемы компоновки данных для отчета варианты настроек, описанные в схеме, предоставляются пользователю как стандартные варианты отчета.
Система предоставляет возможность создания нового варианта отчета непосредственно в режиме 1С:Предприятие. Такое действие рекомендуется выполнять опытным пользователям. В этом случае новый вариант отчета сохраняется в хранилище вариантов отчетов, из которого другие пользователи могут загрузить необходимый вариант. Описание хранилища вариантов отчетов см. здесь.
При помощи механизма сравнения и объединения конфигураций (см. здесь) части настроек можно сравнивать и объединять.
Загрузку схемы компоновки данных из XML можно осуществить стандартными средствами встроенного языка.
10.3.6.1. Структура варианта настроек компоновки данных
Структура – это некоторый скелет настроек. Она определяет взаимное расположение их основных элементов.
Структура настроек доступна через свойство Структура объекта НастройкиКомпоновкиДанных. Элементами структуры настроек могут быть:
● группировки;
● таблицы (ТаблицаКомпоновкиДанных);
● диаграммы (ДиаграммаКомпоновкиДанных);
● вложенные объекты настройки (НастройкиВложенногоОбъектаСистемыКомпоновкиДанных).
Группировка
Для реализации группировки в структуре настроек предусмотрено три разных типа данных:
● группировки (ГруппировкаКомпоновкиДанных);
● группировки таблиц (ГруппировкаТаблицыКомпоновкиДанных);
● группировки диаграмм (ГруппировкаДиаграммыКомпоновкиДанных).
Наличие трех типов связано с необходимостью реализовать ограничения, наложенные на взаимное расположение элементов в дереве структуры: таблицы и диаграммы не могут включать в себя ничего, кроме группировок. Соответственно, все объекты группировок имеют идентичную объектную модель, они различаются типом вложенной коллекции значений и составом параметров вывода.
Поля группировки
Набор полей, по которым осуществляется группировка, описывается с помощью объекта ПоляГруппировкиСистемыКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция полей группировки, состоящая из объектов ПолеГруппировкиСистемыКомпоновкиДанных.
Примечание. При выполнении группировки по полю-периоду в группировку автоматически добавляется родительское поле-период, не являющееся дополнительным периодом, в том случае, если в родительских группировках не осуществлялась группировка по этому родительскому полю-периоду.
Например, если группировка осуществляется по полю Регистратор, то в группировку автоматически будет добавлено поле ПериодСекунда.
При этом создание группировок по реквизитам полей-периодов запрещено.
Автополе группировки
Перед использованием автополе будет преобразовано в набор полей группировки.
Формирование набора происходит следующим образом. Берутся используемые выбранные поля со следующими условиями:
● они доступны для использования в полях группировки;
● не являются ресурсами;
● не зависят от других выбранных полей;
● не зависят от уже существующих полей группировки.
Если поле уже включено в данные поля группировки, повторно оно не добавляется.
Таблица
Описание таблицы в структуре настроек выполняется с помощью объекта ТаблицаСистемыКомпоновкиДанных.
Диаграмма
Описание диаграммы в структуре настроек выполняется с помощью объекта ДиаграммаСистемыКомпоновкиДанных.
Вложенный объект
Описание вложенного объекта в структуре настроек выполняется с помощью объекта НастройкиВложенногоОбъектаСистемыКомпоновкиДанных.
Для объекта реализовано свойство Имя, предназначенное для идентификации вложенного отчета в сгенерированном макете компоновки данных.
10.3.6.2. Свойства настроек компоновки данных
Выбор
Набор полей, выводимых в результат компоновки. Описывается с помощью объекта ВыбранныеПоляКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция выбранных полей, состоящая из объектов ВыбранноеПолеКомпоновкиДанных.
Группа выбранных полей
Используется для группировки полей. Описывается с помощью объекта ГруппаВыбранныхПолейКомпоновкиДанных.
Автовыбранное поле
Перед использованием автополе будет преобразовано в набор выбранных полей. Состав набора полей зависит от того, какому элементу структуры принадлежит разворачиваемое автополе и в какой части структуры этот элемент располагается. Для каждого элемента система обходит все родительские элементы структуры отчета и из выбранных полей этих элементов отбирает ресурсы и поля по следующим правилам:
● Для группировки и группировки таблицы на место автополя подставляются:
● все используемые поля этой группировки, которые доступны для использования в выбранных полях;
● поля, которые являются реквизитами ее полей группировки,
● ресурсы родительских элементов.
ВНИМАНИЕ! Система при обходе учитывает только те группировки, тип которых Без иерархии или Иерархия.
● Для группировки диаграммы ресурсы не выбираются, а обходятся все родительские элементы структуры настроек, и из выбранных полей этих элементов выбираются поля группировок, если по данному полю была задана группировка типа Только иерархия.
● Для группировок типа Детальные записи (группировка, группировка таблицы, группировка диаграммы) из основных выбранных полей настроек, которым принадлежит группировка, выбираются все используемые поля, кроме полей, участвовавших в вышестоящих группировках, и реквизитов этих полей. Если же такая группировка имеет тип Только иерархия, то ее поля и реквизиты будут использоваться системой при формирования набора полей выбора. Для группировки диаграммы ресурсы также не выбираются.
● Для группировок типа Детальная информация в выбранные поля помещаются поля – не ресурсы, которые доступны в группировке или родительской группировке, а в таблице – еще и в какой-либо группировке с противоположной оси.
● Для диаграммы автополе выбора заменяется всеми вышестоящими ресурсами.
● Для таблицы автополе выбора преобразовывается в набор используемых родительскими элементами ресурсов.
Примечание. Если поле уже включено в выбранные поля, повторно оно не добавляется.
При этом поля добавляются в набор в следующем порядке: вначале поля собственных полей группировки (для группировок), потом поля из глобальных настроек (для группировок типа Детальные записи) и самыми последними – ресурсы и поля из родительских элементов.
Отбор
Используется для фильтрации записей, попадающих в результат компоновки. Кроме того, может использоваться для отбора записей, к которым применяется некоторое оформление (условное оформление), и для создания пользовательских полей выбора.
Описывается с помощью объекта ОтборКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция элементов отбора, состоящая из объектов ЭлементОтбораКомпоновкиДанных.
Группа элементов отбора
Используется для группировки элементов отбора, которая упорядочивает данные результата. Описывается с помощью объекта ГруппаЭлементовОтбораКомпоновкиДанных.
Порядок
Описывает, каким образом нужно упорядочивать записи, выводимые в результат. Представляет собой объект ПорядокКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция элементов порядка, состоящая из объектов ЭлементПорядкаКомпоновкиДанных.
Автоэлемент порядка
Перед использованием автоматический элемент порядка будет преобразован в набор элементов порядка.
Формирование набора происходит по следующим правилам: ресурсы добавляются безусловно, а из полей не ресурсов в порядок добавляются поля, являющиеся реквизитами поля группировки, и само поле группировки (для детальных записей будут занесены все поля). Поля группировки, которые не были указаны в глобальном упорядочивании, попадут в конец порядка. Если поле уже включено в данный порядок, повторно оно не добавляется.
Условное оформление
Описывает, каким образом оформлять различные поля результата. Представляет собой объект УсловноеОформлениеКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция элементов порядка, состоящая из объектов ЭлементУсловногоОформленияКомпоновкиДанных.
В оформлении компоновки данных конструктора компоновки данных параметры Формат, Текст редактируются как многоязычные.
Для элемента условного оформления имеется возможность указать, для каких областей необходимо применять условное оформление:
● К полю, выводимому в группировке;
● К полю, выводимому в иерархической группировке;
● К полю, выводимому в общем итоге;
● К заголовку полей;
● К области заголовка отчета;
● К области, в которой выводятся параметры отчета;
● К области, в которой выводятся значения отборов.
Оформляемые поля
Поля, к которым применяется оформление. Описываются с помощью объекта ОформляемыеПоляКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция оформляемых полей, состоящая из объектов ОформляемоеПолеКомпоновкиДанных. Если поля не указаны, оформление будет применено ко всей области.
Параметры вывода
Значения параметров вывода определяют внешний вид соответствующих объектов. Для части параметров поддерживается наследование. В связи с этим коллекция параметров вывода для элемента может содержать параметры, не относящиеся к нему самому, но используемые в элементах, которые могут быть вставлены в подчиненную часть структуры настроек.
Параметры данных
Значения параметров данных, как правило, используются в запросах для фильтрации выборки.
Пользовательские поля
Пользовательские поля позволяют расширить множество используемых доступных полей, определяя собственные выражения либо наборы вариантов с условиями использования конкретного варианта.
Пользовательские поля описываются с помощью объекта ПользовательскиеПоляКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция пользовательских полей, состоящая из объектов двух видов:
● поле-выражение (объект ПользовательскоеПолеВыражениеКомпоновкиДанных);
● поле-выбор (объект ПользовательскоеПолеВыборКомпоновкиДанных).
Тип поля определяется системой автоматически, на основе его свойств.
Варианты пользовательского поля
Описание набора альтернатив, определяющих значение поля выбора. Описываются с помощью объекта ВариантыПользовательскогоПоляВыборКомпоновкиДанных. В свойстве Элементы этого объекта содержится коллекция вариантов пользовательского поля-выбора, состоящая из объектов ВариантПользовательскогоПоляВыборКомпоновкиДанных.
Работа с автополями
Если один элемент структуры настроек содержит автополя АвтоПолеГруппировкиСистемыКомпоновкиДанных, АвтоВыбранноеПолеСистемыКомпоновкиДанных и АвтоЭлементПорядкаСистемыКомпоновкиДанных, они преобразовываются в следующем порядке:
● АвтоПолеГруппировкиСистемыКомпоновкиДанных,
● АвтоВыбранноеПолеСистемыКомпоновкиДанных,
● АвтоЭлементПорядкаСистемыКомпоновкиДанных.
10.3.6.3. Доступные объекты
Доступные объекты – набор, определяющий объекты, которые могут быть использованы в компоновке как вложенные. Например, вложенные отчеты.
10.3.6.4. Доступные поля
Доступные поля – это множество полей, которые могут быть использованы при настройке компоновки данных и будут распознаны и правильно обработаны на последующих этапах компоновки. Доступные поля различаются по применению. Выделены следующие коллекции полей:
● поля для выбора (свойство ДоступныеПоляВыбора);
● поля группировок (свойство ДоступныеПоляГруппировок);
● поля порядка (свойство ДоступныеПоляПорядка);
● поля параметров данных (свойство ДоступныеПоляПараметровДанных);
● поля отбора (свойство ДоступныеПоляОтбора);
● поля отбора элементов структуры – используются во всех элементах структуры, кроме верхнего (свойство ДоступныеПоляОтбораЭлементовСтруктуры);
● поля дополнительных отборов – используются в условном оформлении (свойство ДоступныеПоляДополнительныхОтборов).
Все перечисленные свойства содержат коллекции значений, элементами которых являются объекты ДоступноеПолеКомпоновкиДанных.
В конструкторе схемы компоновки данных и в настройках схемы компоновки данных отчета доступные поля располагаются в следующей последовательности: вначале поля, не являющиеся ресурсами, в алфавитном порядке по заголовкам, после них поля-ресурсы в алфавитном порядке по заголовком. Последними в списке отражаются системные папки.
Доступное поле отбора
Для использования в отборах реализован специальный тип доступных полей. Он обладает всеми свойствами обычного доступного поля, а также предоставляет наборы доступных видов сравнения и доступных значений поля, необходимых для корректного построения элементов отбора.
10.3.6.5. Компоновщик настроек компоновки данных
Компоновщик настроек представляется объектом встроенного языка системы «1С:Предприятие» КомпоновщикНастроекКомпоновкиДанных. Объект предназначен для связи настроек компоновки данных и схемы компоновки данных. На основе схемы компоновки данных строится источник доступных настроек для работы конструктора настроек.
При необходимости использовать источник доступных настроек одного компоновщика в другом, имеется возможность получить источник доступных настроек с помощью метода ПолучитьИсточникДоступныхНастроек() объекта КомпоновщикНастроекКомпоновкиДанных.
Пример передачи источника доступных настроек компоновки данных:
Копировать в буфер обменаПерем ПараметрыФормы; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ИсточникДоступныхНастроек", Список.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек()); ПараметрыФормы.Вставить("Настройки", Список.КомпоновщикНастроек.Настройки); ПараметрыФормы.Вставить("ФиксированныеНастройки", Список.КомпоновщикНастроек.ФиксированныеНастройки); ПараметрыФормы.Вставить("ПользовательскиеНастройки", Список.КомпоновщикНастроек.ПользовательскиеНастройки); ОткрытьФорму("ОбщаяФорма.ФормаКомпоновщикаНастроек", ПараметрыФормы);
10.3.7. Пользовательские настройки системы компоновки данных
Существует возможность отметки некоторых настроек для того, чтобы пользователь мог редактировать их в отдельной форме. Данный механизм называется пользовательские настройки.
При выполнении компоновки применяются как пользовательские, так и полные настройки. При этом пользовательские настройки «накладываются» на полные, формируя реально исполняемые настройки.
10.3.7.1. Объектная модель пользовательских настроек
При помощи пользовательских настроек редактируются следующие объекты:
● ОтборКомпоновкиДанных,
● ЭлементОтбораКомпоновкиДанных,
● ГруппаЭлементовОтбораКомпоновкиДанных,
● ПорядокКомпоновкиДанных,
● ВыбранныеПоляКомпоновкиДанных,
● УсловноеОформлениеКомпоновкиДанных,
● ЭлементУсловногоОформленияКомпоновкиДанных,
● ЗначениеПараметраНастроекКомпоновкиДанных,
● ГруппировкаКомпоновкиДанных,
● ГруппировкаТаблицыКомпоновкиДанных,
● ГруппировкаДиаграммыКомпоновкиДанных,
● ТаблицаКомпоновкиДанных,
● ДиаграммаКомпоновкиДанных,
● ВложеннаяСхемаКомпоновкиДанных,
● КоллекцияЭлементовСтруктурыКомпоновкиДанных,
● КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных,
● КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных.
У данных объектов существуют следующие свойства:
● ИдентификаторПользовательскойНастройки – предназначено для идентификации объекта пользовательской настройки. Если данное свойство установлено, то объект считается пользовательским и подлежит редактированию в пользовательских настройках.
При интерактивной отметке настройки как пользовательской система автоматически генерирует уникальный идентификатор и заполняет данное свойство строковым представлением этого идентификатора.
● ПредставлениеПользовательскойНастройки – строка, используемая для отображения представления в пользовательских настройках. В конструкторе схемы возможен ввод представления на нескольких языках.
● РежимОтображения – используется для определения быстрых настроек. Подробнее о данной возможности будет рассказано ниже.
Пользовательские настройки в объектной модели представляются отдельным объектом ПользовательскиеНастройкиКомпоновкиДанных. Данный объект имеет свойство Элементы. В этой коллекции находятся элементы пользовательских настроек. Возможны объекты следующих типов:
● ОтборКомпоновкиДанных,
● ЭлементОтбораКомпоновкиДанных,
● ГруппаЭлементовОтбораКомпоновкиДанных,
● ПорядокКомпоновкиДанных,
● ВыбранныеПоляКомпоновкиДанных,
● УсловноеОформлениеКомпоновкиДанных,
● ЭлементУсловногоОформленияКомпоновкиДанных,
● ЗначениеПараметраКомпоновкиДанных,
● ГруппировкаКомпоновкиДанных,
● ГруппировкаТаблицыКомпоновкиДанных,
● ГруппировкаДиаграммыКомпоновкиДанных,
● ТаблицаКомпоновкиДанных,
● ДиаграммаКомпоновкиДанных,
● НастройкиВложенногоОбъектаКомпоновкиДанных,
● СтруктураНастроекКомпоновкиДанных.
10.3.7.2. Настройка пользовательских элементов настроек
Установить пользовательский признак элемента настройки можно в форме настройки пользовательского элемента, который вызывается при помощи команды Свойства элемента пользовательских настроек.

Рис. 368. Открыть пользовательскую настройку
В форме настройки пользовательского элемента также можно указать представление, которое будет использоваться для элемента, и режим его редактирования.

Рис. 369. Свойство пользовательской настройки
В списке структуры настроек команда Свойства элемента пользовательских настроек позволяет настраивать пользовательские настройки для текущего элемента структуры. Для каждого элемента структуры определен свой состав настраиваемых элементов.
|
Объект |
Настраиваемые элементы |
|
Отчет |
● выбранные поля, ● порядок, ● отбор, ● условное оформление, ● состав группировок |
|
Группировка/ |
● группировка, ● выбранные поля, ● отбор, ● порядок, ● условное оформление, ● состав вложенных группировок |
|
Диаграмма |
● диаграмма, ● выбранные поля, ● условное оформление, ● состав группировок серий, ● состав группировок точек |
|
Таблица |
● таблица, ● выбранные поля, ● условное оформление, ● состав группировок строк, ● состав группировок колонок |
|
Вложенная схема |
● вложенный отчет, ● выбранные поля, ● отбор, ● порядок, ● условное оформление, ● состав группировок |
В зависимости от того, где происходит вызов, команда Свойства элемента пользовательских настроек позволяет изменять различные настройки:
● список отбора – пользовательские настройки для текущего элемента/групп отбора;
● список параметров вывода и параметров данных – пользовательские настройки для текущего параметра;
● список условного оформления – пользовательские настройки для текущего элемента условного оформления.
Кроме того, в таблице структуры команда Пользовательские настройки позволяет открыть модальную форму, в которой будут отображаться пользовательские настройки со своими значениями по умолчанию.
10.3.7.3. Редактирование пользовательских настроек
Редактирование объекта ПользовательскиеНастройки осуществляется в таблице (см. рис.370).

Рис. 370. Редактор пользовательских настроек
Совет. Имеет смысл выносить в пользовательские те настройки (из всего многообразия, предлагаемого системой компоновки данных), которые предназначены для управления отчетом конечным пользователем. Предполагается, что пользователь будет оперировать только этими настройками.
Например, в запросе, использующемся в качестве набора данных для отчета, существует большое количество полей, по которым можно выполнять отбор. Однако разработчик отчета считает, что есть ряд элементов отбора, которые используются наиболее часто и их логично вынести в пользовательские настройки. Тогда пользователь будет иметь возможность отредактировать как «особые» элементы отбора (строка Товары на рис.370), так и отбор целиком (строка Отбор на рис.370).
Также логично выносить в пользовательские такие настройки, как:
● Период или дата – практически для всех отчетов;
● Группировки и условное оформление – для табличных отчетов;
● Значение счета бухгалтерского учета – для бухгалтерских отчетов и т. д.
При этом для каждого отчета разработчик будет самостоятельно принимать решение о том, какие настройки станут пользовательскими в его отчете (или варианте отчета).
10.3.7.4. Быстрые пользовательские настройки
Среди пользовательских настроек разработчик отчета может выделить такие настройки, которые пользователь редактирует наиболее часто (например, фильтр по товару в отчете Остатки товаров или фильтр по организации в бухгалтерском отчете). Тогда можно указать, что пользовательская настройка является быстрой (свойство РежимОтображения установлено в значение Быстрый доступ). Такие настройки будут редактироваться прямо в форме отчета.

Рис. 371. Быстрые пользовательские настройки
У таблицы, предназначенной для редактирования пользовательских настроек, также имеется свойство РежимОтображения, которое определяет, показывать все пользовательские настройки или только быстрые.
Если пользователя не устраивает текущий состав быстрых пользовательских настроек, то он может самостоятельно изменить их состав, например, исключить из состава быстрых пользовательских настроек те, которые он не планирует изменять часто.
Для такой настройки пользователю необходимо выбрать команду Еще – Изменить состав настроек… (Все действия – Изменить состав настроек…) в окне редактирования настроек отчета.

Рис. 372. Редактирование состава быстрых пользовательских настроек
В левой части формы представлены все пользовательские настройки, которые могут быть выбраны быстрыми, а в правой – настройки, которые в данный момент редактируются в форме отчета.
В формах редактирования отбора или условного оформления присутствуют команды редактирования свойств элемента пользовательских настроек. Таким образом, пользователь может перенести в состав быстрых пользовательских настроек те элементы отбора или условного оформления, которые он изменяет постоянно в своей работе.
Управлять составом быстрых пользовательских настроек можно также из формы редактирования настроек с помощью колонки Редактирование в форме отчета. Эта колонка по умолчанию не отображается в форме, и ее необходимо включить с помощью команды Еще – Изменить форму… (Все действия – Изменить форму…) окна редактирования настроек.
В этом случае нельзя добавлять новые настройки, но можно оперативно менять состав существующих настроек.

Рис. 373. Колонка «Редактирование в форме отчета»
10.3.7.5. Компоновщик настроек
У компоновщика настроек имеется свойство ПользовательскиеНастройки. В данном свойстве находятся значения редактируемых пользовательских настроек. Свойство недоступно для записи с помощью встроенного языка. Кроме того, у компоновщика настроек имеется метод ЗагрузитьПользовательскиеНастройки(), который загружает значения пользовательских настроек, переданные в качестве параметра метода.
Метод ПолучитьНастройки() позволяет получить копию текущих настроек (с учетом пользовательских настроек).
Метод ЗагрузитьНастройки() загружает переданные настройки в компоновщик настроек (пользовательские настройки также перезаполняются на основании переданных данных).
10.3.7.6. Заполнение значений пользовательских настроек
При заполнении значений пользовательских настроек для различных элементов настроек в пользовательские настройки добавляются соответствующим образом заполненные элементы.
Для типов ЭлементОтбораКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных, ЭлементУсловногоОформленияКомпоновкиДанных, ЗначениеПараметраКомпоновкиДанных, ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных, ТаблицаКомпоновкиДанных, ДиаграммаКомпоновкиДанных, ВложеннаяСхемаКомпоновкиДанных в соответствующих пользовательских элементах заполняется свойство ИдентификаторПользовательскойНастройки и свойства, которые реально редактируются в пользовательских настройках.
Для типов ОтборКомпоновкиДанных, УсловноеОформлениеКомпоновкиДанных, ПорядокКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных создается объект соответствующего типа. В его коллекцию добавляются элементы, у которых свойство РежимОтображения отлично от Недоступный.
Имеются исключения:
● Не будут добавляться элементы, которые сами отмечены как пользовательские. Например, в пользовательский отбор не будет помещен элемент отбора, который отмечен как пользовательский.
● Не будут добавлены элементы, содержащие пользовательские элементы. Например, не будет добавлена группа условий, если в этой группе присутствуют элементы, отмеченные как пользовательские.
● Для вложенных элементов свойство РежимОтображения не анализируется. Они добавляются или не добавляются вместе с родительскими элементами.
Для типов КоллекцияЭлементовСтруктурыКомпоновкиДанных, КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных, КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных создается объект СтруктураНастроекКомпоновкиДанных, в который помещаются группировки, уже присутствующие в структуре. Помещаются только группировки с установленными полями группировок (не помещаются детальные записи). Помещение группировок происходит до того, как будут встречены детальные записи, ветвление, таблица, диаграмма, вложенная схема, неиспользуемая группировка, группировка с пользовательской структурой.
10.3.7.7. Применение пользовательских настроек
Применение пользовательских настроек к основным настройкам выполняется в методе ПолучитьНастройки() компоновщика настроек. При этом выполняются описанные ниже действия:
● Для типов ЭлементОтбораКомпоновкиДанных, ЭлементУсловногоОформленияКомпоновкиДанных, ЗначениеПараметраКомпоновкиДанных содержимое элементов копируется в соответствующие пользовательские элементы настроек.
● Для типов ОтборКомпоновкиДанных, УсловноеОформлениеКомпоновкиДанных, ПорядокКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных элементы, находящиеся в основных настройках и отмеченные как Недоступный, остаются без изменения. Элементы из пользовательских настроек переносятся в основные. Они добавляются в конец коллекции для Отбора, ВыбранныхПолей и УсловногоОформления и в начало коллекции – для Порядка.
● Для типов ГруппаЭлементовОтбораКомпоновкиДанных, ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных, ТаблицаКомпоновкиДанных, ДиаграммаКомпоновкиДанных, НастройкиВложенногоОбъектаКомпоновкиДанных устанавливается свойство Использование в соответствующем элементе основных настроек (на основании признака Использование элемента пользовательских настроек).
● Для типа СтруктураНастроекКомпоновкиДанных в элементе структуры основных настроек ищутся соответствующие группировки и располагаются в правильном порядке. Недостающие группировки создаются. Не найденные в пользовательских настройках группировки либо группировки, отключенные пользователем, не удаляются, а помечаются особым образом. Это позволяет сохранить их для возможного использования в будущем. Пользовательские группировки с пустым набором полей (детальные записи) при применении игнорируются.
10.4. Макет компоновки данных
Макет компоновки данных представляется объектом встроенного языка системы «1С:Предприятие» МакетКомпоновкиДанных и состоит из множества других вложенных объектов. Макет компоновки данных является инструкцией по выполнению компоновки данных для системы компоновки данных. Макет компоновки уже содержит в себе описание макетов областей, тексты исполняемых запросов, расположение группировок и т. д.
10.4.1. Составные части макета компоновки данных
Каждый макет компоновки данных содержит множество объектов, описывающих ту или иную часть. Рассмотрим эти составные части.

Рис. 374. Составные части макета компоновки данных
Источники данных
Макет компоновки данных может содержать несколько описаний источников данных.
Под источником данных подразумевается источник, из которого будут получаться данные. В качестве источника данных выступает информационная база системы «1С:Предприятие».
Источники данных описываются в свойстве ИсточникиДанных макета, которое содержит коллекцию значений, состоящую из элементов ИсточникДанных МакетаКомпоновкиДанных.
Допускается создание нескольких источников данных, указывающих при помощи строки соединения на одну информационную базу.
Наборы данных
Наборы данных макета компоновки данных содержат описание того, какие данные необходимо получать в компоновке данных.
Они описываются в свойстве НаборыДанных макета компоновки данных.
Допускается наличие нескольких наборов данных.
Вложенный набор данных рассматривается как обычный набор данных. Вложенный набор данных всегда связан с его родительским набором данных. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается внутренней.
Поле набора данных макета компоновки данных
Набор данных может содержать описания полей, которые будут доступны для этого набора данных. Поля, описания которых в наборе данных отсутствуют, являются недоступными. Если некоторое поле присутствует в запросе набора данных, но отсутствует в описании полей набора данных, то поле не будет доступно для использования.
Поля набора данных описываются в свойстве Поля набора данных, которое содержит коллекцию значений, состоящую из элементов ПолеНабораДанныхМакетаКомпоновкиДанных.
Значения параметров макета компоновки данных
Макет компоновки данных может содержать параметры в любых выражениях, присутствующих в нем.
Значения параметров описываются в свойстве ЗначенияПараметров макета компоновки данных, которое содержит коллекцию значений, состоящую из элементов ЗначениеПараметраМакетаКомпоновкиДанных.
Связи наборов данных макета компоновки данных
Наборы данных, присутствующие в макете компоновки данных, могут быть связаны друг с другом. Связи между наборами данных описываются в макете компоновки данных.
Связи наборов данных описываются в свойстве СвязиНаборовДанных макета компоновки данных, которое содержит коллекцию значений, состоящую из элементов СвязьНаборовДанныхМакетаКомпоновкиДанных.
Макеты областей макета компоновки данных
При исполнении компоновки в результат компоновки будут выводиться макеты областей. Эти макеты областей также находятся в макете компоновки данных.
Описания макетов находятся в свойстве Макеты макета компоновки данных, которое содержит коллекцию значений, состоящую из элементов ОписаниеМакетаОбластиМакетаКомпоновкиДанных.
Тело макета компоновки данных
Предыдущие составные части макета компоновки данных содержали информацию о том, откуда получать информацию. Само же указание, как следует скомпоновать данные, находится в теле макета компоновки данных. Тело макета компоновки данных состоит из элементов.
Возможно использование следующих типов элементов:
● группировка – описывает выводимую в результат группировку;
● детальные записи – описывает выводимые в результат детальные записи набора данных;
● таблица – описывает таблицу, выводимую в результат;
● диаграмма – описывает диаграмму, выводимую в результат;
● макет – описывает макеты, используемые при выводе.
Группировка таблицы
Описывает группировку таблицы и представляется объектом встроенного языка ГруппировкаТаблицыМакетаКомпоновкиДанных.
Группировка таблицы содержит те же свойства, что и обычная группировка, со следующими различиями:
● Тело группировки таблицы и иерархическое тело группировки таблицы могут содержать только те элементы, которые содержатся в теле таблицы, т. е. только группировки таблицы, детальные записи таблицы, макеты группировки таблицы. Иерархическое тело может дополнительно содержать иерархическую группировку таблицы, обозначающую место, в которое будут выводиться иерархические записи группировки.
● В качестве макетов заголовков и подвала используются макеты группировки таблицы.
● Возможно использование свойств:
● МакетОбщихИтогов – указывает макет, используемый при выводе общих итогов по группировке, типа МакетГруппировкиТаблицыМакетаКомпоновкиДанных;
● РасположениеОбщихИтогов – содержит расположение общих итогов для группировки, типа РасположениеИтоговКомпоновкиДанных.
Детальные записи таблицы
Описывают детальные записи таблицы, представляются объектом встроенного языка ЗаписиТаблицыМакетаКомпоновкиДанных.
Макет группировки таблицы
Макет группировки таблицы описывает макеты, используемые при выводе группировки таблицы, и представляется объектом встроенного языка МакетГруппировкиТаблицыМакетаКомпоновкиДанных.
Группировка диаграммы
Описывает группировку диаграммы и представляется объектом встроенного языка ТелоГруппировкиДиаграммыМакетаКомпоновкиДанных.
Группировка диаграммы содержит те же свойства, что и обычная группировка, со следующими различиями:
● Тело группировки диаграммы и иерархическое тело группировки диаграммы могут содержать только макеты группировки диаграммы и группировки диаграммы. Иерархическое тело может дополнительно содержать иерархическую группировку диаграммы, обозначающую место, в которое будут выводиться иерархические записи группировки.
● Отсутствуют макеты для заголовка и подвала.
Макет группировки диаграммы
Макет группировки диаграммы описывает макеты, используемые при выводе группировки диаграммы, и представляется объектом встроенного языка МакетГруппировкиДиаграммыМакетаКомпоновкиДанных.
10.4.2. Макеты областей
Макет области представляет собой декларативное описание расположения выводимых данных, а также их визуальное оформление, необходимое для вывода данных в документы различных форматов.
Существуют несколько принципиально различных макетов областей:
● собственно макет области,
● макеты областей диаграммы.
Структура макетов показана на рис.375.

Рис. 375. Структура макета
Во встроенном языке системы «1С:Предприятие» макет области представляется объектом типа МакетОбластиКомпоновкиДанных. Данный объект является коллекцией объектов СтрокаТаблицыОбластиКомпоновкиДанных.
10.4.2.1. Структура макета области
Как было сказано выше, макет области представляет собой коллекцию объектов типа СтрокаТаблицыОбластиКомпоновкиДанных. Строка таблицы представляет собой коллекцию ячеек, расположенных горизонтально слева направо. Таким образом, несколько идущих подряд строк таблицы области компоновки данных образуют прямоугольную таблицу.
Коллекция ячеек таблицы
Данный объект представляет собой коллекцию ячеек строки таблицы. Описывается объектом встроенного языка ЯчейкиТаблицыОбластиКомпоновкиДанных. Элементами коллекции являются ячейки таблицы – объекты типа ЯчейкаТаблицыОбластиКомпоновкиДанных.
Ячейка таблицы представляет собой прямоугольную область, используемую для вывода данных в документы различных форматов. Внутри ячейки могут содержаться выводимые поля, текст и оформления.
Коллекция элементов макета
Коллекция элементов макета (объект ЭлементыМакетаОбластиКомпоновкиДанных) представляет собой коллекцию полей (объектов типа ПолеОбластиКомпоновкиДанных). Данные объекты могут содержаться в коллекции в произвольном порядке. Данные, содержащиеся в этих объектах, используются при выводе в документы различных форматов.
Поле
Этот элемент представляет собой поле, выводимое в ячейке таблицы или в элементе списка. Внутри поля может содержаться произвольное значение и его оформление. Поле описывается объектом встроенного языка ПолеОбластиКомпоновкиДанных.
Оформление ячейки таблицы
Оформление ячейки таблицы представляет собой коллекцию объектов, описывающих оформление ячейки таблицы. Описывается объектом встроенного языка ОформлениеЯчейкиТаблицыОбластиКомпоновкиДанных.
Оформление поля
Оформление поля представляет собой коллекцию, содержащую всего один объект – элемент оформления Формат. Описывается объектом встроенного языка ОформлениеПоляОбластиКомпоновкиДанных.
10.4.2.2. Структура макетов областей диаграммы
Существует три типа макетов областей диаграммы:
● макет диаграммы – объект типа МакетДиаграммыОбластиКомпоновкиДанных;
● макет ресурса диаграммы – объект типа МакетРесурсаДиаграммыОбластиКомпоновкиДанных;
● макет группировки диаграммы – объект типа МакетГруппировкиДиаграммыОбластиКомпоновкиДанных.
При создании макетов диаграммы формируется один макет диаграммы, один макет ресурса диаграммы и несколько макетов группировок диаграммы. Количество макетов группировок соответствует количеству точек и серий в диаграмме.
Принцип работы
Макеты областей используются при выводе отчетов в документы различных форматов. Макет области является составной частью определения макета компоновки данных – объекта типа ОписаниеМакетаСхемыКомпоновкиДанных.
Для того чтобы в ячейках или элементах списка макета области выводились значения выводимых полей отчета, необходимо свойству Значение поля области компоновки данных (объект типа ПолеОбластиКомпоновкиДанных) присвоить значение типа ПараметрСистемыКомпоновкиДанных, содержащее имя параметра. Сам параметр необходимо добавить к списку параметров определения макета и в качестве имени присвоить имя параметра, а в качестве выражения – имя выводимого поля или выражение в терминах языка выражений системы компоновки данных.
Макет диаграммы
Макет диаграммы используется для описания типа диаграммы. Описывается объектом встроенного языка МакетДиаграммыОбластиКомпоновкиДанных.
Макет ресурса диаграммы
Макет ресурса диаграммы используется для формирования значений диаграммы и описывается объектом встроенного языка МакетРесурсаДиаграммыОбластиКомпоновкиДанных.
Макет группировки диаграммы
Макет группировки диаграммы используется для формирования точек и серий диаграммы. Описывается объектом встроенного языка МакетГруппировкиДиаграммыОбластиКомпоновкиДанных.
10.4.3. Макеты оформления
Макет оформления представляет собой декларативное описание предопределенных областей отчета. Данные описания используются генератором областей макетов при формировании макетов областей на основании элементов настройки компоновки данных.
Для интерактивного создания макета оформления необходимо при создании макета с помощью конструктора макетов указать его тип Макет оформления компоновки данных и нажать кнопку Готово. На экран выводится окно макета оформления.

Рис. 376. Окно макета оформления
Окно конструктора состоит из списка областей оформления, таблицы настройки оформления и поля табличного документа Пример для показа результата выбранных настроек.
Непустые области макета отображаются жирным шрифтом.
С помощью контекстного меню перетаскивания параметры оформления могут быть скопированы параметрами из одной области в другую или заменены.
С помощью кнопки Стандартный макет можно загрузить уже подготовленный макет из списка стандартных макетов, в который также войдут общие макеты конфигурации.
Кнопка Очистить макет удаляет оформление в макете.
Последовательность действий для настройки оформления следующая:
● выбирается область оформления;
● в таблице настроек указываются (устанавливаются пометки) параметры, оформление которых требуется изменить, и указываются значения оформления;
● результат внесенных изменений контролируется в поле Пример.
Если предполагается, что в отчет будет выведено несколько уровней группировки, то нужно в списке областей для каждой области, в которой будут уровни, создать подчиненные области по числу уровней группировки. Для создания уровня области нужно указать область и нажать кнопку Добавить командной панели. В список областей добавляется строка, имя которой УровеньN, где N – номер уровня группировки. Выбор оформления уровня группировки выполняется как описано выше.
Примечание. Если было указано несколько уровней, то при удалении уровня группировки всегда удаляется самый нижний уровень текущей области, независимо от того, какой уровень в списке был выбран.
Структура макета оформления
Каждый макет оформления состоит из некоторого количества областей макета оформления. Область макета оформления имеет имя – строку из перечня областей макетов оформления, указывающую, к какой области применять данный макет, и коллекцию элементов оформления.
Элемент оформления имеет два свойства:
● Уровень – положительное число, причем если уровень равен 0, то считается, что оформление применяется по умолчанию ко всем макетам области определенного типа;
● Оформление – коллекция, содержащая имена свойств оформления и их значения.
Во встроенном языке системы «1С:Предприятие» макет оформления представляется объектом типа МакетОформленияКомпоновкиДанных.
Макет оформления компоновки данных
Данный объект представляет собой коллекцию областей макета оформления. Эта коллекция реализована в виде значений параметров. Именем параметра является имя области. Имя области является предопределенной строкой из перечня областей. Значением параметра является объект типа ОбластьМакетаОформленияКомпоновкиДанных.
Область макета оформления компоновки данных
Данный объект представляет собой описание предопределенной области и является коллекцией элементов области макета оформления (объектов типа ЭлементОбластиМакетаОформленияКомпоновкиДанных).
Элемент области макета оформления компоновки данных
Данный объект представляет собой описание области макета для определенного уровня иерархии. Если в качестве номера уровня указан 0, то считается, что данный макет оформления применяется ко всем областям данного типа.
10.4.4. Генератор областей макетов
Генератор областей макетов позволяет динамически формировать макеты областей компоновки данных, используемых для вывода результата компоновки данных в документы различных форматов. Под макетом области подразумевается декларативное описание расположения выводимых данных и их оформление.
При работе генератора областей макетов можно выделить следующие этапы:
● формирование общих макетов отчета,
● формирование макетов группировок,
● расположение группировок,
● расположение выводимых полей группировок,
● применение макета оформления,
● применение условных оформлений,
● объединение ячеек.
Рассмотрим каждый этап работы генератора областей макетов.
Формирование общих макетов отчета
На данном этапе генератором областей макетов на основании настройки компоновки данных создаются общие макеты. Тип и количество макетов зависят от типа элемента настройки компоновки данных.
Макет группировки
Для группировки формируется специальный макет – шапка группировки. Данный макет содержит названия выводимых полей в левой части макета и названия выводимых ресурсных полей в правой части макета, например:
|
Контрагент |
Контрагент.Код |
Количество |
Сумма |
|
|
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
||
Макет таблицы
Для таблицы формируется следующая группа макетов:
● Макет шапки таблицы. Данный макет содержит названия выводимых полей строк таблицы, например:
|
Контрагент |
Контрагент.Код |
|
|
Номенклатура |
Номенклатура.Код |
Номенклатура. |
● Макет итогов по строкам. Данный макет содержит специальное слово Итого и названия ресурсных полей, если они выводятся горизонтально, например:
|
Итого |
|
|
Количество |
Сумма |
● Макет итогов по колонкам. Данный макет содержит специальное слово Итого и названия ресурсных полей, если они расположены вертикально, например:
|
Итого |
Количество |
|
Сумма |
● Макет общих итогов. Данный макет содержит ресурсные поля, выводимые в таблице и необходимые для отображения в таблице общих итогов, например:
|
Представление( Сумма( |
Представление( Сумма( |
Расположение данных макетов внутри таблицы показано ниже.
|
Шапка таблицы |
Область колонок |
Макет итогов по строкам |
|
Область строк |
Область ресурсов |
Область итогов по строкам |
|
Макет итогов по колонкам |
Область итогов по колонкам |
Макет общих итогов |
Расположение макетов итогов по строкам и колонкам управляется свойствами РасположениеОбщихИтоговПоГоризонтали и РасположениеОбщихИтоговПоВертикали соответственно. Возможны следующие варианты расположения общих итогов:
● Нет – общие итоги не выводятся.
|
Шапка таблицы |
Область колонок |
|
Область строк |
Область ресурсов |
● Начало – общие итоги выводятся в первой колонке или в первой строке таблицы соответственно.
|
Шапка таблицы |
Макет итогов по строкам |
Область колонок |
|
Макет итогов по колонкам |
Макет общих итогов |
Область итогов по колонкам |
|
Область строк |
Область итогов по строкам |
Область ресурсов |
● Конец – общие итоги выводятся в последней колонке или в последней строке таблицы соответственно.
|
Шапка таблицы |
Область колонок |
Макет итогов по строкам |
|
Область строк |
Область ресурсов |
Область итогов по строкам |
|
Макет итогов по колонкам |
Область итогов по колонкам |
Макет общих итогов |
● НачалоИКонец – общие итоги выводятся в первой колонке/строке, а также в последней колонке/строке таблицы.
|
Шапка таблицы |
Макет итогов по строкам |
Область колонок |
Макет итогов по строкам |
|
Макет итогов по колонкам |
Макет общих итогов |
Область итогов по колонкам |
Макет общих итогов |
|
Область строк |
Область итогов по строкам |
Область ресурсов |
Область итогов по строкам |
|
Макет итогов по колонкам |
Макет общих итогов |
Область итогов по колонкам |
Макет общих итогов |
● Авто – итоги по колонкам располагаются в последней строке, а итоги по строкам – в последней колонке.
Макет диаграммы
В макете содержатся оформительские свойства диаграммы.
Формирование макетов группировок
В настройке компоновки данных существует три вида группировок:
● группировка,
● группировка таблицы,
● группировка диаграммы.
Для каждого вида группировок формируется свой набор макетов областей. Однако расположение группировок друг относительно друга, расположение выводимых полей внутри областей группировок и расположение ресурсных полей делаются единообразно. При формировании любого макета области группировки можно выделить следующие этапы.
Определение типа макета группировки. Тип макета группировки получается из параметра ТипМакетаГруппировкиКомпоновкиДанных объекта ЗначенияПараметровВыводаКомпоновкиДанных. Данное свойство имеет смысл только для простых группировок, т. е. группировок, не входящих в таблицу и диаграмму. Возможны следующие варианты расположения выбранных полей:
● Авто – автоматическое определение расположения выбранных полей: если в группировке есть вложенная таблица, диаграмма, вложенный отчет или группировка с типом макета группировки Вертикальный, то выбранные поля располагаются вертикально, иначе – горизонтально.
● Горизонтальный – расположение выбранных полей горизонтально, друг за другом слева направо.
|
Контрагент |
Контрагент.Код |
|
|
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
|
Алекс-2002 |
00009 |
|
|
1С:Бухгалтерия 8 |
00013 |
1С:Бухгалтерия 8 |
● Вертикальный – расположение выбранных полей вертикально, друг под другом.
|
Контрагент |
Алекс-2002 |
|
Контрагент.Код |
00009 |
|
Номенклатура |
1С:Бухгалтерия 8 |
|
Номенклатура.Код |
00013 |
|
Номенклатура.Наименование |
1С:Бухгалтерия 8 |
Расположение группировок друг относительно друга. Расположение группировок друг относительно друга управляется параметром РасположениеПолейГруппировки объекта ЗначенияПараметровВыводаКомпоновкиДанных. Возможны следующие варианты расположения:
● Вместе – группировки располагаются друг под другом. Например, для группировок по контрагенту и номенклатуре.
|
Контрагент |
Контрагент.Код |
|
|
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
|
Алекс-2002 |
00009 |
|
|
1С:Бухгалтерия 8 |
00013 |
1С:Бухгалтерия 8 |
● Отдельно – каждая группировка располагается в отдельной области. Группировки располагаются друг за другом слева направо. Выводимые поля группировки выводятся также и во вложенных группировках.
|
Контрагент |
Контрагент.Код |
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
|
Алекс-2002 |
00009 |
|
||
|
Алекс-2002 |
00009 |
1С:Аспект 7.7 |
00015 |
1С:Аспект 7.7. Компактная торговая система |
● ОтдельноИТолькоВИтогах – каждая группировка располагается в отдельной области. Группировки располагаются друг за другом слева направо. Выводимые поля выводятся только в данной группировке.
|
Контрагент |
Контрагент.Код |
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
|
Алекс-2002 |
00009 |
|
||
|
|
|
1С:Аспект 7.7 |
00015 |
1С:Аспект 7.7. Компактная торговая система |
● Расположение выводимых полей. Существуют поля двух видов: собственно выводимые поля (поля-владельцы и/или их реквизиты) и ресурсные поля. Вывод данных полей имеет существенные различия.
● Вывод полей. Как указано выше, существуют поля-владельцы и поля-реквизиты. Поля-владельцы выводятся в макет области в соответствии с их порядком следования в настройке компоновки данных. Расположение полей-реквизитов управляется специальным параметром РасположениеРеквизитов объекта ЗначенияПараметровВыводаКомпоновкиДанных. Возможны следующие варианты расположения:
● Вместе – поля реквизитов располагаются вместе в отдельной колонке и при выводе разделяются запятой.
|
Контрагент |
Контрагент.Код |
|
Номенклатура |
Номенклатура.Код, Номенклатура.Наименование |
● Отдельно – каждое поле реквизита располагается в отдельной колонке.
|
Контрагент |
Контрагент.Код |
|
|
Номенклатура |
Номенклатура.Код |
Номенклатура.Наименование |
● ВместеСВладельцем – поля реквизитов располагаются в одной колонке с их полем-владельцем и при выводе разделяются запятой.
|
Контрагент, Контрагент.Код |
|
Номенклатура, Номенклатура.Код, Номенклатура.Наименование |
● ВСпециальнойПозиции – поля-реквизиты располагаются в специальной колонке, размещенной правее всех остальных колонок группировки.
|
Контрагент |
Контрагент.Код |
|
Номенклатура |
Номенклатура.Код, Номенклатура.Наименование |
● Вывод полей, расположенных в папках. Расположение данных полей управляется свойством Расположение папки. Возможны следующие варианты расположения:
● Авто – поля выводятся в зависимости от типа группировки. Если группировка простая, то поля выводятся горизонтально; если группировка табличная, то вертикально.
|
Контрагент |
|
||
|
Номенклатура |
Реквизиты номенклатуры |
||
|
Номенклатура.Код |
Номенклатура.Наименование |
Номенклатура.ОснПост |
|
|
Контрагент |
|
|
Номенклатура |
Реквизиты номенклатуры |
|
Номенклатура.Код |
|
|
Номенклатура.Наименование |
|
|
Номенклатура.ОснПост |
● Горизонтально – поля выводятся горизонтально слева направо.
|
Контрагент |
|
||
|
Номенклатура |
Реквизиты номенклатуры |
||
|
Номенклатура.Код |
Номенклатура.Наименование |
Номенклатура.ОснПост |
|
● Вертикально – поля выводятся вертикально друг под другом.
|
Контрагент |
|
|
Номенклатура |
Реквизиты номенклатуры |
|
Номенклатура.Код |
|
|
Номенклатура.Наименование |
|
|
Номенклатура.ОснПост |
● ВОтдельнойКолонке – поля выводятся в отдельной колонке, расположенной правее всех остальных колонок.
|
Контрагент |
Контрагент.Код |
|
||
|
Номенклатура |
Реквизиты номенклатуры |
|||
|
Номенклатура.Код |
Номенклатура.Наименование |
Номенклатура.ОснПост |
||
● Вместе – поля выводятся вместе и при выводе разделяются запятой.
|
Контрагент |
|
|
Номенклатура |
Реквизиты номенклатуры |
|
|
Номенклатура.Код, Номенклатура.Наименование, Номенклатура.ОсновнойПоставщик |
● Вывод ресурсных полей. Специальное свойство РасположениеРесурсов объекта ПараметрыВывода управляет расположением ресурсных полей. Возможны следующие варианты расположения:
● Горизонтально – поля ресурсов располагаются горизонтально слева направо.
● Вертикально – поля ресурсов располагаются вертикально друг под другом.
Если для папки не установлен заголовок, то место для заголовка в макете не выделяется. В этом случае поля выводятся в соответствии со значением свойства Расположение папки.
Применение макета оформления
После расположения группировок и полей к сформированной области применяется макет оформления. Смысл применения макета оформления состоит в том, что всем элементам макета области добавляются ранее определенные свойства оформления, например, ЦветФона или ЦветТекста. Стоит отметить, что существует большое количество макетов оформления областей.
Применение условных оформлений
После применения макета оформления к макету области применяются условные оформления. Применение условного оформления заключается в том, что в макет области добавляются свойства оформления, содержащие логические выражения. В результате вычисления логического выражения принимается решение, какое значение оформительского свойства необходимо применить.
Объединение ячеек
После формирования макета области в ней могут оказаться незаполненные ячейки. Такие ячейки необходимо объединять для более наглядного представления макета области. Возможны следующие варианты расположения ячеек.
● Незаполненные ячейки расположены справа от заполненных ячеек. Ячейки, расположенные справа, объединяются с ячейками слева.

Рис. 377. Незаполненные ячейки справа
● Незаполненные ячейки расположены под заполненными ячейками. Ячейки, расположенные снизу, объединяются с ячейками вверху.

Рис. 378. Незаполненные ячейки снизу
● Незаполненные ячейки расположены и справа, и под заполненными ячейками. Ячейки, расположенные справа, объединяются с ячейками слева. Затем ячейки, расположенные снизу, объединяются с ячейками вверху.

Рис. 379. Незаполненные ячейки снизу и справа
10.4.5. Формирование макета компоновки данных
Формирование макета компоновки данных осуществляется на основании схемы компоновки данных и настроек. Схема компоновки данных создается разработчиком отчета, настройки вводятся пользователем.
Формирование макета компоновки осуществляется при помощи объекта встроенного языка КомпоновщикМакетаКомпоновкиДанных.
Данный объект не имеет свойств и имеет один метод Выполнить(), в который передается схема компоновки данных, настройки компоновки данных, переменная, в которую помещается объект ДанныеРасшифровки, и макет оформления. Данный метод возвращает созданный макет компоновки данных.
В процессе работы компоновщик макета:
● Создает макет компоновки.
● Модифицирует запросы наборов данных для получения нужной пользователю информации и помещает их в макет компоновки.
● Формирует фильтры в тексте запроса или описании набора данных.
● При необходимости создает наборы данных для получения и проверки иерархии.
● В макете компоновки данных создает нужные параметры со значениями, установленными пользователем.
● Заполняет элементы тела макета компоновки данных, в которые помещает группировки, таблицы и т. д., заполняет их параметры.
● Использует генератор областей макета (см. здесь). Если указан макет оформления (четвертый параметр), данный макет будет использоваться для оформления генерируемого макета.
● Если указан третий параметр, создает объект ДанныеРасшифровки и помещает его в переданную переменную. Созданный таким образом объект нужно использовать при работе процессора компоновки и при отработке расшифровки.
Компоновщик макета при генерации макета компоновки данных анализирует значение параметра Группировка функции ВычислитьВыражение(). Если параметр содержит имя группировки, которая присутствует в настройках, то компоновщик макета оставляет данное имя без изменения. В противном случае компоновщик макета ищет среди родительских группировок текущей группировки группировку, содержащую в полях группировки все поля, указанные в параметре Группировка функции ВычислитьВыражение(), и проставляет в данный параметр имя найденной группировки.
Например, если в качестве параметра функции ВычислитьВыражение() указана строка Номенклатура, ХарактеристикаНоменклатуры, то при генерации макета компоновщик макета найдет группировку по полям Номенклатура и ХарактеристикаНоменклатуры и в сгенерированный макет поместит имя найденной группировки. При этом группировка ищется среди группировок, которые доступны в месте вычисления группировки. Так, если компоновщик макета генерирует выражение для ячейки таблицы, то поиск группировки будет осуществляться в группировках колонок, для которых выводится ячейка, группировках строк, для которых выводится ячейка, и группировках, в которые вложена таблица. Таким образом, ищутся группировки, к которым может быть применена функция ВычислитьВыражение(). Если найдено несколько, то выбирается группировка, которая ближе. В таблице сначала ищется группировка в строке, после этого ищется группировка в колонке, затем ищется группировка над таблицей.
Если группировка не найдена, то выражение заменяется на NULL.
Фактически это позволяет использовать ВычислитьВыражение() в пользовательских полях, указывая группировки не по именам группировок, а по именам полей группировок.
Пример:
Копировать в буфер обменаСхемаКомпоновкиДанных = ПолучитьСхемуКомпоновкиДанных(); ИсполняемыеНастройки = ПолучитьИсполняемыеНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИсполняемыеНастройки);
Созданный макет компоновки данных может быть использован для исполнения, т. е. для получения результата.
10.5. Процессор компоновки данных
Исполнение компоновки данных осуществляется при помощи объекта системы «1С:Предприятие» ПроцессорКомпоновкиДанных.
На вход процессору компоновки данных передается макет компоновки данных.
Работа с процессором компоновки данных предельно проста: после установки процессору компоновки данных макета компоновки данных у данного объекта можно последовательно получать элементы результата компоновки данных, которые в дальнейшем можно использовать, например, для вывода в табличный документ или сохранить для последующего использования.
Ниже приведен пример работы с процессором компоновки данных.
Копировать в буфер обменаЭлементыФормы.ТДРезультатТабличныйДокумент.Очистить(); МакетКД = ПолучитьМакетКомпоновки(); ПроцессорКД = Новый ПроцессорКомпоновкиДанных; ПроцессорКД.Инициализировать(МакетКД); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТДРезультатТабличныйДокумент); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультатаКД = ПроцессорКД.Следующий(); Если ЭлементРезультатаКД = Неопределено Тогда Прервать; КонецЕсли; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКД); КонецЦикла; ПроцессорВывода.ЗакончитьВывод();
При инициализации процессора компоновки данных можно дополнительно указать:
● объект – внешние наборы данных – структуру, у которой в качестве ключа содержится имя внешнего набора данных, а в качестве значения – набор данных;
● данные расшифровки – объект, в который будет помещаться информация о расшифровке;
● возможность использования внешних функций – признак, можно ли в выражениях использовать функции общих модулей конфигурации.
10.6. Функциональные опции и права на просмотр поля в отчете
При получении настроек отчета по умолчанию система компоновки данных автоматически выполняет следующие действия с настройками:
● Если у пользователя нет права на интерактивный просмотр некоторого поля или данное поле связано с выключенными функциональными опциями, это поле становится недоступным для настройки пользователем. То есть оно не будет отображаться в списке доступных полей.
● Если поле связано с реквизитом, тип которого выключен функциональной опцией, то это поле удаляется из списка доступных полей.
● Таблица запроса и реквизиты этой таблицы становятся недоступными, если функциональная опция отключает объект конфигурации, образующий эту таблицу.
● Если поле, на просмотр которого у пользователя нет права, или поле, которое связано с выключенной функциональной опцией, используется в пользовательском поле, то такое пользовательское поле удаляется и по нему не устанавливается отбор.
● Поле системы компоновки данных считается недоступным, если все поля, используемые в выражении этого поля, связаны с выключенными функциональными опциями или недоступными на просмотр полями. При этом учитываются все поля, входящие в выражение поля в запросе, за исключением полей, участвующих в условиях запросов и полей, участвующих в разделе КОГДА операции выбора (ВЫБОР КОГДА ИНАЧЕ КОНЕЦ), а также выражения из объединений, если таковые присутствуют.
● Из полей группировки удаляются все поля, на которые у пользователя нет права на просмотр, и поля, которые связаны с выключенными функциональными опциями. Если после удаления поля группировки у группировки не остается ни одного поля группировки с установленным признаком использования, то удаляется вся группировка, а ее содержимое (если, например, группировка включает таблицу) помещается на место группировки.
● Если после удаления из таблицы группировки-строки или группировки-колонки таблица остается без группировок, то таблица удаляется.
● Если после удаления из диаграммы группировки-серии или группировки-точки диаграмма остается без группировок, то диаграмма удаляется.
● Из упорядочивания удаляются все поля, для которых у пользователя нет права на просмотр и которые связаны с выключенными функциональными опциями.
● Из оформляемых полей элемента условного оформления удаляются поля, на которые у пользователя нет права на просмотр и которые связаны с выключенными функциональными опциями. Если после удаления оформляемого поля из элемента условного оформления в элементе не остается ни одного оформляемого поля с включенным признаком использования, то такой элемент условного оформления также удаляется.
● Если в отборе элемента условного оформления использовалось поле, для которого у пользователя нет права на просмотр, или поле, которое связано с выключенными функциональными опциями, то такой элемент условного оформления удаляется.
Если поле ранее было доступно и пользователь каким-либо образом сохранил настройку, а в дальнейшем (когда поле стало для него недоступно) загрузит настройку, поля не будут автоматически удаляться из настройки. Это сделано для того, чтобы пользователь имел возможность заменить недоступные поля другими полями или самостоятельно удалил их использование из настроек.
Если при выполнении метода Выполнить() объекта КомпоновщикМакетаКомпоновки параметр ПроверятьДоступностьПолей установлен в значение Истина, то будет осуществляться проверка доступности полей для текущего пользователя и проверка наличия поля во включенной функциональной опции. При использовании в настройках недоступного поля будет выдаваться исключение. Если значение параметра Ложь, то проверка осуществляться не будет.
Примечание. В случае выполнения отчета из автоматически сгенерированной формы будет осуществляться проверка доступности полей для текущего пользователя и проверка наличия поля во включенной функциональной опции.
10.7. Результат компоновки данных
Результат компоновки данных представляется набором элементов результата компоновки данных. Как объект встроенного языка системы «1С:Предприятие» результат компоновки данных не существует, существует лишь набор элементов результата компоновки данных, которые и образуют результат.
При необходимости элементы результата компоновки данных могут быть помещены в некоторую универсальную коллекцию значений, например Массив, для того чтобы манипулировать результатом как единым целым.
Элементы результата могут быть получены при помощи объекта ПроцессорКомпоновкиДанных, а также могут быть созданы и заполнены средствами встроенного языка.
Элементы результата компоновки данных можно вывести в табличный документ при помощи процессора вывода.
Рассмотрим пример элементов данных.
Элемент 1
|
Свойство |
Значение |
|
Тип элемента |
Начало |
|
Макеты |
ЗаголовокТаблицы, ЗаголовокКолонки, ЗаголовокСтроки, Ресурсы |
|
Расположение вложенных элементов |
Вертикально |
Элемент 2
|
Свойство |
Значение |
|
Тип элемента |
Начало |
|
Расположение вложенных элементов |
Горизонтально |
Элемент 3
|
Свойство |
Значение |
|
Тип элемента |
НачалоКонец |
|
Имя макета |
ЗаголовокТаблицы |
Элемент 4
|
Свойство |
Значение |
|
Тип элемента |
НачалоКонец |
|
Имя макета |
ЗаголовокКолонки |
Элемент 5
|
Свойство |
Значение |
|
Тип элемента |
Конец |
Элемент 6
|
Свойство |
Значение |
|
Тип элемента |
Начало |
|
Расположение вложенных элементов |
Горизонтально |
Элемент 7
|
Свойство |
Значение |
|
Тип элемента |
НачалоКонец |
|
Имя макета |
ЗаголовокСтроки |
Элемент 8
|
Свойство |
Значение |
|
Тип элемента |
НачалоКонец |
|
Имя макета |
Ресурсы |
Элемент 9
|
Свойство |
Значение |
|
Тип элемента |
Конец |
Элемент 10
|
Свойство |
Значение |
|
Тип элемента |
Конец |
Результат вывода таких элементов должен выглядеть следующим образом:
|
ЗаголовокТаблицы |
ЗаголовокКолонки |
|
ЗаголовокСтроки |
Ресурсы |
Если бы элемент 2 содержал макеты ЗаголовокТаблицы и ЗаголовокСтроки, то при выводе элемента 3 использовался бы макет из этого элемента, однако при выводе элемента 7 использовался бы макет из элемента 1, т. к. элемент 2 завершается элементом 5.
Элементы результата могут быть сохранены в XML стандартными средствами, например:
Копировать в буфер обменаЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("result"); МакетКомпоновкиДанных = ПолучитьМакетКомпоновки(); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); Пока Истина Цикл ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда Прервать; КонецЕсли; СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ЭлементРезультатаКомпоновкиДанных, "item", "http://v8.1c.ru/8/data-composition-system/result"); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЭлементыФормы.РезультатКомпоновкиДанных.УстановитьТекст(ЗаписьXML.Закрыть());
10.7.1. Вывод результата компоновки в табличный документ
Вывод отчета в табличный документ осуществляется при помощи объекта ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.
Элементы результата компоновки могут быть получены при помощи процессора компоновки данных либо сформированы любыми другими средствами.
Пример вывода результата компоновки данных в табличный документ:
Копировать в буфер обменаЭлементыФормы.ТДРезультатТабличныйДокумент.Очистить(); МакетКомпоновкиДанных = ПолучитьМакетКомпоновки(); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТДРезультатТабличныйДокумент); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда Прервать; КонецЕсли; ПроцессорВывода.ВывестиЭлемент( ЭлементРезультатаКомпоновкиДанных); КонецЦикла; ПроцессорВывода.ЗакончитьВывод();
Также имеется возможность использовать метод Вывести() объекта ПроцессорВывода. В качестве параметра метода следует указать ПроцессорКомпоновкиДанных. В этом случае вывод результата компоновки будет выглядеть так:
Копировать в буфер обменаПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Процессор компоновки данных выполняет фиксацию заголовка таблицы, если в отчет выводится одна таблица или одна группировка (возможно, с вложенными группировками). Управлять возможностями фиксации (сверху и слева) можно с помощью настроек параметров вывода Фиксация слева и Фиксация сверху.
10.7.2. Вывод результата компоновки в таблицу и дерево значений
Вывод отчета в таблицу или дерево значений осуществляется при помощи объекта ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. Метод УстановитьОбъект() является аналогом метода УстановитьДокумент(). Если метод УстановитьОбъект() не был вызван, результат будет выведен в таблицу значений.
Элементы результата компоновки могут быть получены при помощи процессора компоновки данных либо сформированы любыми другими средствами.
Пример вывода результата компоновки данных в дерево значений:
Копировать в буфер обменаКомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(ДеревоРезультата); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда Прервать; КонецЕсли; ПроцессорВывода.ВывестиЭлемент( ЭлементРезультатаКомпоновкиДанных); КонецЦикла; ПроцессорВывода.ЗакончитьВывод();
При выводе результата компоновки в таблицу или дерево значений существуют следующие ограничения:
● В настройках должны присутствовать только группировки и детальные записи. Использование таблиц и диаграмм не допускается.
● Все папки, указанные в выбранных полях, игнорируются.
● Не используется условное оформление, а также оформление для поля, указанное в схеме компоновки данных.
● Из параметров вывода используются только следующие:
● расположение общих итогов по вертикали,
● тип заголовка полей,
● количество записей,
● процент записей.
● Предопределенные макеты не используются.
Для вывода результата в таблицу или дерево значения реализовано два вида макетов: макет для заголовка (МакетЗаголовкаКоллекцииЗначенийОбластиКомпоновкиДанных) и макет содержимого (МакетКоллекцииЗначенийОбластиКомпоновкиДанных).
10.8. Расчет итогов по полям остатка в системе компоновки данных
Полем остатка с точки зрения макета компоновки данных является то, у которого в роли проставлен признак Остаток.
10.8.1. Расчет итогов по полям остатка
Если в макете компоновки данных в некотором наборе данных присутствует поле начального остатка, то в наборе данных также должно присутствовать соответствующее ему поле конечного остатка, и наоборот.
Все поля-периоды, описанные в наборе данных, должны иметь непрерывную нумерацию, начинающуюся с единицы.
Для корректного расчета итогов по полям источника данных данные должны удовлетворять следующему правилу: в данных должна соблюдаться уникальность значений полей-периодов и полей-измерений, т. е. данные не должны содержать строк с одинаковыми значениями полей-периодов и полей-измерений.
При расчете итогов по полям-остаткам используется следующий алгоритм:
● если требуется осуществить расчет итога поля остатка для группировки по полю-периоду:
● если по всем полям-периодам уже была осуществлена группировка:
● для каждой комбинации полей измерений, по которым осуществлялась группировка:
● получается запись, ближайшая к текущему периоду;
● если полученная запись была на текущий период, то из данной записи будут получаться начальные и конечные остатки;
● иначе, если полученная запись имеет предыдущий период, конечный остаток записи будет использован как начальный и конечный остаток;
● иначе начальный остаток полученной записи будет использоваться как начальный и конечный остаток;
● иначе (группировка еще не произведена по всем полям-периодам):
● для каждой комбинации полей измерений, по которым осуществлялась группировка:
● получаются первая и последние записи, у которых поля использованных периодов равны текущему периоду;
● если записи найдены, то первая запись будет использоваться как начальный остаток, последняя – как конечный;
● если записи не найдены, то получается ближайшая запись и ее остатки используются как начальные остатки и конченые остатки в зависимости от того, предшествует ли найденная запись текущему периоду;
● иначе (не группировка по полю-периоду):
● первые по хронологии записи для неиспользованных полей-измерений будут использоваться в качестве записей начального остатка, последние – в качестве конечного.
10.8.2. Расчет итогов по полям бухгалтерских остатков
Расчет итогов по полям бухгалтерских остатков выполняется аналогично расчету итогов по обычным полям-остаткам. Кроме того, при расчете итогов по таким полям используется информация о поле-счете. Если итоги рассчитываются для группировки по полю-счету или если до группировки, для которой считаются итоги, была осуществлена группировка по полю-счету, при расчете итога используется вид счета. В противном случае вид счета считается активно-пассивным.
В зависимости от вида счета итоговый остаток будет вычисляться по следующим формулам:
● Если полученный остаток больше 0:
|
|
Дт |
Кт |
|
Активный |
Остаток |
0 |
|
Пассивный |
0 |
-Остаток |
|
АП |
Остаток |
0 |
● Если полученный остаток меньше 0:
|
|
Дт |
Кт |
|
Активный |
Остаток |
0 |
|
Пассивный |
0 |
-Остаток |
|
АП |
0 |
-Остаток |
10.8.3. Компоновка макета
Для обеспечения расчета корректных итогов компоновщик макета при генерации макета выполняет дополнительные действия:
● если используется начальный остаток, автоматически добавит в запрос и поле конечного остатка, даже если он не используется, и наоборот;
● если в отчете используется поле-реквизит измерения, автоматически добавит в запрос само поле-измерение, даже если оно не используется.
10.9. Работа с иерархией в системе компоновки данных
В системе компоновки данных имеются следующие аспекты использования иерархии:
● иерархические группировки,
● условие В ИЕРАРХИИ.
Рассмотрим перечисленные аспекты подробнее.
10.9.1. Иерархические группировки
При создании группировки пользователь может указать для некоторого поля группировки необходимость выполнения иерархической группировки.
Для того чтобы система выполнила иерархическую группировку, процессору компоновки данных необходимо знать, откуда получать данные для построения иерархии. Реализуется это путем создания набора данных с указанием связи набора данных самого к себе.
Рассмотрим пример. Допустим, необходимо построить иерархию для поля типа Справочник.Номенклатура.
Набор данных для построения иерархии будет выглядеть так:
Копировать в буфер обменаВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка, Номенклатура.Родитель КАК Родитель ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В(&Ссылки)
Для этого набора данных должна быть определена связь от поля Родитель к полю Номенклатура с параметром Ссылка. Таким образом, набор данных позволит последовательно получить всех родителей элемента.
Набор данных для построения иерархии может быть либо явно описан в схеме компоновки данных, либо автоматически сгенерирован компоновщиком макета компоновки данных.
В случае указания набора данных иерархии в схеме компоновки необходимо добавить, например, запрос следующего вида:
Копировать в буфер обменаВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка, Номенклатура.Родитель КАК Родитель {ВЫБРАТЬ Ссылка.*, Родитель} ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В(&Ссылки)
Этот набор данных необходимо связать сам с собой, как было описано выше. Кроме того, к набору данных нужно создать связь от поля, для которого требуется создать иерархию.
10.9.2. Иерархические детальные записи
Существует возможность выводить в отчет детальные записи с иерархией, используя настройки связей наборов данных.
Например, определим набор данных Номенклатура:
Копировать в буфер обменаВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Родитель, Номенклатура.Код, Номенклатура.Наименование, Номенклатура.ЭтоГруппа ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель В (&Родители)
Определим связь набора данных Номенклатура с самим собой.
В качестве поля выражения-источника установим поле Ссылка, в качестве выражения-приемника – поле Родитель. Параметр связи – поле Родители с возможностью получения списка параметров. Таким образом, из каждой строки набора данных система будет выбирать значение поля Ссылка, и для него будут получены записи, в которых это значение содержится в поле Родитель. Для того чтобы дочерние элементы выбирались только в группах, установим выражение условия связи, равное полю ЭтоГруппа. В качестве начального значения иерархической связи будем использовать выражение Значение(Справочник.Номенклатура.ПустаяСсылка). Оно означает, что на первом уровне иерархического набора данных будут получены записи, поле Родитель в которых является пустой ссылкой на справочник Номенклатура.
Для вывода такого набора данных в отчет в настройках схемы компоновки достаточно вывести детальные записи (добавьте в список выбранных полей поля Код и Наименование).
Полученный результат приведен на рис.380.

Рис. 380. Иерархические детальные записи
10.9.3. Вывод одного элемента в нескольких родительских записях
Система компоновки данных позволяет выводить один элемент в нескольких родительских записях при построении иерархии.
Приведем пример.
В конфигурации создадим два справочника: Дети и Сотрудники, а также регистр сведений ДетиСотрудников с измерениями Ребенок и РодительРебенка.
В справочнике Сотрудники создадим записи: Иванова Мария, Иванов Иван. В справочнике Дети создадим запись: Иванов Степан.
Допустим, в регистре сведений ДетиСотрудников есть записи:
|
Ребенок |
Родитель |
|
Иванов Степан |
Иванов Иван |
|
Иванов Степан |
Иванова Мария |
Создадим запрос набора данных Дети, который будет получать список детей:
Копировать в буфер обменаВЫБРАТЬ Дети.Ссылка ИЗ Справочник.Дети как Дети
Создадим также запрос набора данных Иерархия, который будет получать иерархические записи:
Копировать в буфер обменаВЫБРАТЬ ДетиСотрудников.Ребенок КАК Ссылка, ДетиСотрудников.РодительРебенка КАК Родитель ИЗ РегистрСведений.ДетиСотрудников КАК ДетиСотрудников ГДЕ ДетиСотрудников.Ребенок В(&Ссылка) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Сотрудники.Ссылка, NULL ИЗ Справочник.Сотрудники КАК Сотрудники ГДЕ Сотрудники.Ссылка В(&Ссылка)
Первое объединение запроса выбирает родителей детей. Вторая часть запроса выбирает сотрудников, так как иерархический набор должен содержать и сами иерархические записи.
Опишем связи между наборами данных.
В качестве источника связки укажем набор данных Дети, приемника – набор данных Иерархия. Выражение-источник – поле Ссылка, выражение-приемник – поле Ссылка. Параметром связи укажем поле Ссылка. Укажем, что возможен список параметров.
Опишем иерархическую связь. Набор данных Иерархия свяжем сам с собой, поле-источник – Родитель, поле-приемник – Ссылка. Параметром связи укажем поле Ссылка и укажем возможность списка параметров.
ВНИМАНИЕ! Поле иерархического набора данных, с которым осуществляется связь набора данных, должно именоваться так же, как и в исходном наборе данных. В противном случае система не сможет получать реквизиты полей для иерархического набора, в том числе не сможет получать представление для иерархических значений.
В настройках отчета создадим иерархическую группировку по полю Ссылка, представление которого изменим на Родитель, и выполним отчет:

Рис. 381. Результирующая таблица
В результате запись Иванов Степан выведена в обеих группировках.
10.9.4. Условие «В ИЕРАРХИИ»
Пользователь может указать для поля условие В ИЕРАРХИИ. В этом случае пользователю должны выдаться записи, находящиеся в иерархии указанной ссылки.
Если такое условие наложено в глобальном фильтре, оно попадет в текст запроса в виде условия В ИЕРАРХИИ. Если условие используется не в глобальном фильтре, то, чтобы отработать условие, процессору компоновки данных необходимо иметь набор данных, который будет содержать ссылки, удовлетворяющие условиям.
Такой набор данных может быть либо явно описан в схеме компоновки данных, либо будет автоматически сгенерирован компоновщиком макета.
10.10.Использование системы компоновки данных при разработке прикладных решений
В процессе разработки прикладных решений система компоновки данных может быть использована средствами встроенного языка в соответствии с описанной выше объектной моделью.
Кроме этого, система компоновки данных может быть задействована при визуальном конструировании отчетов. Например, после создания объекта конфигурации Отчет можно создать макет этого отчета, содержащий схему компоновки данных. Для этого следует нажать кнопку открытия у поля ввода Основная схема компоновки данных.

Рис. 382. Создание схемы компоновки данных
Нажатие кнопки Открыть схему компоновки данных позволит открыть основную схему компоновки данных. Если схемы нет, то будет создана новая и назначена основной.
В результате этих действий будет открыт конструктор макета, который позволит создать макет, содержащий схему компоновки данных.

Рис. 383. Конструктор макета
После нажатия кнопки Готово будет открыт конструктор схемы компоновки данных, с помощью которого можно создать схему компоновки данных (см. здесь) или загрузить существующую схему компоновки из документа XML.
После создания схемы компоновки данных отчет готов к работе и может быть запущен в режиме 1С:Предприятие. Система при запуске отчета автоматически сгенерирует форму отчета и форму настроек.
На закладке Формы кроме основной формы отчета можно указать:
● форму настроек отчета, которая будет появляться при выполнении команды Настройка… в режиме 1С:Предприятие и которая используется для задания параметров пользовательских настроек;
● форму редактирования варианта отчета (которая будет открываться при выборе пункта меню Еще – Изменить вариант… (Все действия – Изменить вариант…) автоматической формы отчета), с помощью которой продвинутый пользователь сможет редактировать текущий вариант отчета (см. здесь).

Рис. 384. Настройка форм отчета
Если формы, которые автоматически генерирует система при использовании отчета на базе системы компоновки данных, не устраивают конечных пользователей системы, то прикладной разработчик может создать свои формы. Для этого следует воспользоваться возможностями конструктора форм отчета.

Рис. 385. Конструктор формы отчета
10.10.1. Параметры ввода
В схеме компоновки данных для полей наборов данных, вычисляемых полей и параметров имеется возможность указать параметры ввода. Данные параметры описывают, каким образом следует вводить значения для полей в отборе и параметрах. Например, в отчете Остатки товаров на складах можно указать, что для поля Номенклатура будет доступен Быстрый выбор. Тогда, задавая значение отбора по номенклатуре, мы сможем пользоваться этой возможностью. Также можно указать особую форму выбора для поля Склад того же отчета.
Подробнее о параметрах ввода можно посмотреть во встроенной справке.
10.10.2. Использование в отчетах свойств объектов метаданных
Если в схеме компоновки данных используется набор данных – запрос, то для полей запроса из объектов метаданных получается информация о параметрах ввода и некоторых параметрах оформления. Таким образом, если в схеме компоновки данных не указан некоторый параметр ввода или вывода, то его значение будет автоматически получаться из соответствующего объекта метаданных.
Из объекта метаданных получаются следующие параметры ввода:
● маска,
● связи параметров выбора,
● связь по типу,
● элемент связи по типу,
● форма выбора,
● формат редактирования,
● быстрый выбор.
Кроме того, из объекта метаданных получаются следующие параметры вывода:
● формат,
● выделять отрицательные,
● многострочный режим.
10.10.3. Фоновое выполнение отчетов
При эксплуатации системы могут возникать ситуации, когда отчеты формируются долго. При этом желательно, чтобы пользователь во время выполнения такого длительного отчета имел возможность выполнять другие операции с системой. Такую возможность предоставляет механизм фонового выполнения отчетов (с использованием механизма фоновых заданий).
Автоматически создаваемая форма отчета использует фоновое выполнение отчета в клиент-серверном варианте работы системы, а в файловом варианте – непосредственное формирование отчета. Если в клиент-серверном варианте работы не требуется фоновое выполнения отчета, то можно использовать метод расширения формы отчета СкомпоноватьРезультат(), указав в качестве параметра признак непосредственного формирования отчета.
Пример:
Копировать в буфер обменаСкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
Если во время фонового выполнения отчета будет выполнено интерактивное изменение пользовательских настроек, интерактивное изменение или выбор варианта отчета, то выполнение отчета будет прекращено, а табличный документ будет отображаться более светлыми цветами.
Если во время фонового выполнения будет закрыта форма отчета, то выполнение отчета будет прекращено автоматически, даже если в обработчике события формы отчета ПередЗакрытием параметру СтандартнаяОбработка будет присвоено значение Ложь. Остановка выполнения отчета (и соответствующего фонового задания) происходит после вызова обработчика события формы отчета ПриЗакрытии.
При формировании отчета могут возникать различные ошибки, например, отчет может занять больше оперативной памяти, чем установлено в ограничениях сервера. В этом случае будет сформировано исключение. Рекомендуется исключения, которые могут формироваться во время формирования отчета, отображать пользователю, а не игнорировать.
Фоновое выполнение отчета может сопровождаться отображением окна состояния. Окно состояния будет формироваться, если это разрешено (свойство расширения формы отчета РежимАвтоОтображенияСостояния) и если отчет выполняется дольше 2 секунд (4 секунды в режиме низкой скорости соединения). Для отображения состояния отчета система компоновки данных использует свойство ОтображениеСостояния поля табличного документа. Если отчет сформировался за указанное время, то состояние не отображается и сразу отображается результат.
Проверка завершения формирования отчета выполняется клиентским приложением с определенной периодичностью. При этом интервал между каждой следующей проверкой в 1,4 раза длиннее предыдущего (но не длиннее 20 секунд).
Для управления возможностью отображения состояния отчета предназначено свойство расширения формы отчета РежимАвтоОтображенияСостояния. Свойство определяет, каким образом табличный документ, который отображает результат работы отчета, будет отображать состояние отчета. По умолчанию (например, для автоматически генерируемой формы) значение данного свойства равно Авто. Это означает, что окно состояния будет отображать информацию и о неактуальности отчета, и о том, что выполняется формирование отчета.
10.11.Особенности использования системы компоновки данных
● В системе компоновки данных запрещено использовать в качестве пути к данным имена, равные ключевым словам: ВЫБОР, КОГДА, ТОГДА, ИНАЧЕ, КОНЕЦ, ЕСТЬ, НЕ, ПОДОБНО, СПЕЦСИМВОЛ, РАЗЛИЧНЫЕ.
● Если у параметра – стандартный период дата начала или дата окончания содержит пустую дату, считается, что вложенные параметры ДатаНачала и ДатаОкончания не установлены. То есть если у параметра Период дата начала содержит пустую дату, то параметр Период.ДатаНачала считается неустановленным. Аналогично для параметра Период.ДатаОкончания и даты окончания периода. Соответственно, неустановленными считаются параметры, в выражениях которых используются параметры Период.ДатаНачала и Период.ДатаОкончания.
● Считается некорректным запрос, в котором указано ключевое слово РАЗЛИЧНЫЕ и в предложении УПОРЯДОЧИТЬ ПО указано выражение, отсутствующее в списке выборки.
● Запрещена группировка по полям-реквизитам полей-периодов.
● Если у пользователя отсутствует право на интерактивный просмотр объекта метаданных, то система компоновки считает недоступными все поля таблицы объекта.
Допустим, в качестве набора данных используется следующий запрос:
Копировать в буфер обменаВЫБРАТЬ Док.Ссылка.Дата, Док.Ссылка.Номер, Док.Номенклатура, Остатки.Остаток ИЗ Документ.РасходнаяНакладная.Состав КАК Док ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки Остатки ПО Док.Номенклатура = Остатки.Номенклатура
Если у пользователя нет интерактивных прав на таблицу РасходнаяНакладная или РасходнаяНакладная.Состав, то ему не будут доступны поля Дата, Номер, Номенклатура. Если нет прав на таблицу РегистрНакопления.УчетНоменклатуры, то не будет доступно поле Остаток. Если нет права ни на одну таблицу, то не будет доступно ни одно поле.
● При генерации макета компоновки данных из предопределенных макетов удаляются выражения расшифровки, которые содержат поля, недоступные по функциональным опциям.
● Поле иерархического набора данных, с которым осуществляется связь, должно иметь имя, как у поля в наборе данных – источнике. В противном случае из иерархического набора данных не будут получаться поля-реквизиты.
● Если в запросе набора данных в списке выборки получается выражение, которое представляет собой применение функции ПРЕДСТАВЛЕНИЕ() к выражению, получаемому в другом поле, то при автоматическом заполнении доступных полей поле, в котором получается представление, не будет доступным для использования в настройках.
● При выполнении компоновки данных будет выдана ошибка, если выполняется группировка по вычисляемому полю, и в группировке указана необходимость дополнения в периоде.
● В макетах группировки системы компоновки данных автоотступ выполняется только для верхней левой ячейки макета.
● При использовании в системе компоновки данных пакетного запроса, поля, которые не используются в последующих запросах пакета, удаляются из списка выборки и полей группировки. Если запрос, формирующий временную таблицу, не содержит в себе ни одного поля – такой запрос удаляется из пакетного запроса. Также из результирующего макета компоновки данных исключаются наборы данных, из которых не используется ни одно поле. Чтобы исключить подобное удаление полей, следует либо использовать это поле или установить флажок Обязательное в роли поля схемы компоновки данных.
● Если поля временной таблицы, создаваемой в запросе пакетного запроса системы компоновки данных, не используются последующими запросами пакетного запроса, а также если создаваемая временная таблица не находится в обязательных соединениях, то запрос, создающий временную таблицу, удаляется из пакетного запроса макета компоновки данных.
Допустим, в качестве набора данных используется следующий запрос:
Копировать в буфер обменаВЫБРАТЬ Товар ПОМЕСТИТЬ ВременнаяТаблица ИЗ РегистрНакопления.Продажи СГРУППИРОВАТЬ ПО Товар ; ВЫБРАТЬ Склад, Товар ИЗ РегистрНакопления.Остатки ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблица ПО ИСТИНА
Если в настройках компоновки данных не будет задействовано поле Товар, то первый запроса пакета удаляться не будет, т. к. таблица ВременнаяТаблица находится в обязательном соединении.
● При выводе результатов компоновки данных в коллекцию значений, поля различных группировок, ссылающихся на одно поле компоновки данных, попадают в одну колонку коллекции.
● При использовании в запросе набора данных системы компоновки данных с автоматическим заполнением доступных настроек конструкции ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, и накладывании отбора на реквизит поля, отбор применяется только в тех частях объединения, в которых данный реквизит существует. При применении отбора к полю, отбор применяется только в тех частях, где выражение поля не NULL.
● При формировании списка доступных полей учитывается привилегированный режим работы в случае использования из встроенного языка. Если требуется, чтобы состав доступных полей учитывал права доступа пользователя, но при этом в результат компоновки попадали все данные, то рекомендуется выполнять компоновку макета компоновки данных в обычном (не привилегированном режиме), а саму компоновку данных выполнять в привилегированном режиме.
● Во время вычисления выражений системы компоновки данных происходит переход в безопасный режим (см. здесь).
● При использовании в запросе системы компоновки данных полей табличных частей, полученных через точку от других полей, рекомендуется явно указывать псевдонимы для табличных частей и ее вложенных полей. В противном случае возможны проблемы с доступностью полей при компоновке макета компоновки данных.
● Если необходимо обеспечить отбор по реквизиту ВерсияДанных или ИмяПредопределяемыхДанных некоторого поля, с видом сравнения отличным от равно/не равно, заполнено/не заполнено, больше (или равно)/меньше (или равно), в списке/не в списке, то нужно обеспечить доступность данного поля для выбора, а не только доступность для использования в отборе.
